首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

OLE操作EXCEL出现的有关问题

2013-01-01 
OLE操作EXCEL出现的问题本帖最后由 sxqinge 于 2012-11-02 14:47:17 编辑提示错误:EOleSysError with mess

OLE操作EXCEL出现的问题
本帖最后由 sxqinge 于 2012-11-02 14:47:17 编辑 提示错误:EOleSysError with message'因为应用程序正在发送一个输入同步呼叫,所以无法执行传出的呼叫'.
请问这个错误一般预示着什么问题呢?我的程序是把妖哥的稍微改动了下,如下:
1.创建EXCEL文件:


void CreateExcelFiles(AnsiString filename)
{
Variant vExcelApp, vSheet;
try
{
CoInitialize(NULL);
vExcelApp = Variant::CreateObject("Excel.Application");
    }
    catch(...)
    {
        MessageBox(0, "启动 Excel 出错, 可能是没有安装Excel.",
                "WARNING", MB_OK | MB_ICONERROR);
vExcelApp = Unassigned;
        return;
    }
    // 隐藏Excel界面
vExcelApp.OlePropertySet("Visible", false);
// 新建一个工作表
vExcelApp.OlePropertyGet("Workbooks").OleFunction("Add", 1); // 工作表
// 操作这个工作表
vSheet = vExcelApp.OlePropertyGet("ActiveWorkbook")
.OlePropertyGet("Sheets", 1);

// 表格的列数
int nColCount(8);
// 设置单元格的宽度
for(int i=0; i<nColCount; i++)
    {
int nColWidth = 28;
vExcelApp.OlePropertyGet("Columns", i + 1)
                .OlePropertySet("ColumnWidth", nColWidth / 2.6);
    }

......//其他代码

vExcelApp.OlePropertyGet("ActiveWorkbook")
.OleFunction("SaveAs", filename.c_str());
vExcelApp.OleFunction("Quit");
vSheet = Unassigned;
vExcelApp = Unassigned;
CoUninitialize();
}

2.创建成功表格后,就每采集到一个数据,就存入该文件中:

void AddData(AnsiString filename)
{
Variant vExcelApp, vSheet;
try
{
//CoInitialize(NULL);
vExcelApp = Variant::CreateObject("Excel.Application"); //这里出现问题   
}
catch(...)
    {
        MessageBox(0, "启动 Excel 出错, 可能是没有安装Excel.",
                "WARNING", MB_OK | MB_ICONERROR);
vExcelApp = Unassigned;
        return;
}
// 隐藏Excel界面
vExcelApp.OlePropertySet("Visible", false);
vExcelApp.OlePropertyGet("workbooks").OleFunction("open",filename.c_str());
    // 操作这个工作表
vSheet = vExcelApp.OlePropertyGet("ActiveWorkbook")
.OlePropertyGet("Sheets", 1);

int nRow = vSheet.OlePropertyGet("UsedRange").OlePropertyGet("Rows")
.OlePropertyGet("Count") + 1;

......//这里是插入数据代码

vExcelApp.OlePropertyGet("ActiveWorkbook").OleFunction("Save");
    vExcelApp.OlePropertySet("DisplayAlerts",false);
vExcelApp.OleFunction("Quit");
    vSheet = Unassigned;
vExcelApp = Unassigned;
//CoUninitialize();
}

问题就是在AddData函数中,代码的红色标识处,在该处设置断点,走下去的时候就提示如上的错误了,网上没找到相关资料,我现在只是顺序操作,没有其他进程调用这个AddData函数,怎么会出现这样的问题呢?不得其解,求解释。
[解决办法]
1. 创建Excel文件以前,先判断文件是否存在,如存在,直接打开。
2. 如果这个Excel对象在写完以后还要继续写,那就不要关闭它。


3. 如果新创建的文件保存时文件已存在,需要屏蔽掉Excel的警告提示:
vExcelApp.OlePropertySet("DisplayAlerts", false);
[解决办法]
会不会是你要输出的那个Excel正在进行的操作有冲突? 
字面上理解是在等输入,但是你那句是要获取他的信息来输出.
我之前做的时候也是,要修改单元格里面的值,如果我让单元格处于编辑状态,然后再使用修改的话就会报出“被呼叫方拒绝接收呼叫”
不是太懂.给点参考而已

热点排行