如何覆盖在MFC上再次打开的csv文件

时间:2019-01-11 11:31:26

标签: c++ mfc

问题是写入已打开的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()函数时发生访问冲突

2 个答案:

答案 0 :(得分:1)

这不是MFC问题。确实,这是一个Excel OLE自动化问题。

为什么要使其可见,为什么要调用SetUserControl(TRUE)?这些东西都不是必需的。由于某些原因,它可能会挂在参考上并没有关闭Excel,因为您进行了不必要的调用。

第一次调用后,在后台仍运行对Excel的引用吗?检查任务管理器以确认它正在运行或关闭。

在我看来,它仍然开放。如果打开,则无法再次打开。

答案 1 :(得分:0)

对您来说一个好消息是,一个csv文件不需要Excel OLE,您可以仅使用MFC来处理此问题...不需要安装Excel / Office ...将您的csv文件作为文本文件处理使用CStdioFile:CStdioFile