问题是写入已打开的csv文件 环境是Visual 6.0 C ++(MFC) 时间变量是执行时间
int time = 1 ;
BOOL blNewXls = FALSE;
_Application objApp;
_Workbook objBook;
Workbooks objBooks;
Worksheets objSheets;
_Worksheet objSheet;
Range objRange;
LPDISPATCH lpDisp;
BOOL TestView::SaveTrxGeneration1ExcelFile(CString destFileName, MYSQL_ROW row, int num_fields)
{
COleVariant VOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
if( !objApp.CreateDispatch("Excel.Application") ){AfxMessageBox("XLS ERROR"); return FALSE;}
objApp.SetVisible(TRUE);
objApp.SetUserControl(TRUE);
lpDisp = objApp.GetWorkbooks();
objBooks.AttachDispatch(lpDisp);
lpDisp = objBooks.Open(destFileName, VOptional, VOptional, VOptional,VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional);
lpDisp2 = lpDisp;
objBook.AttachDispatch(lpDisp);
lpDisp = objBook.GetSheets();
objSheets.AttachDispatch(lpDisp);
if(time == 2)
{
if( blNewXls )
objBook.SaveAs(COleVariant(destFileName),VOptional, VOptional, VOptional, VOptional,VOptional, FALSE, VOptional, VOptional,VOptional, VOptional);
else
objBook.Save();
objBooks.Close();
objApp.Quit();
objBooks.ReleaseDispatch(); // Release the object-IDispatch binding.
objApp.ReleaseDispatch();
objBooks = NULL; // Destroy the object references.
objApp = NULL;
time = 1;
}
else
time = 2 ;
return TRUE;
}
预期结果:写入2次 实际结果:执行open()函数时发生访问冲突
答案 0 :(得分:1)
这不是MFC问题。确实,这是一个Excel OLE自动化问题。
为什么要使其可见,为什么要调用SetUserControl(TRUE)?这些东西都不是必需的。由于某些原因,它可能会挂在参考上并没有关闭Excel,因为您进行了不必要的调用。
第一次调用后,在后台仍运行对Excel的引用吗?检查任务管理器以确认它正在运行或关闭。
在我看来,它仍然开放。如果打开,则无法再次打开。
答案 1 :(得分:0)
对您来说一个好消息是,一个csv文件不需要Excel OLE,您可以仅使用MFC来处理此问题...不需要安装Excel / Office ...将您的csv文件作为文本文件处理使用CStdioFile:CStdioFile