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