как перезаписать файл CSV, открытый снова на MFC - PullRequest
0 голосов
/ 11 января 2019

проблема в том, что запись 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 голосов
/ 14 января 2019

Хорошей новостью для вас является то, что CSV-файл не требует Excel OLE, вы можете справиться с этим только с помощью MFC ... нет необходимости устанавливать Excel / Office ... обрабатывать CSV-файл как текстовый файл используя CStdioFile: CStdioFile

0 голосов
/ 12 января 2019

Это не вопрос MFC. Действительно, это вопрос автоматизации OLE в Excel.

Почему вы делаете его видимым и почему вызываете SetUserControl (TRUE)? Ни одна из этих вещей не должна быть необходимой. По какой-то причине он, скорее всего, висит на ссылке и не закрывает Excel, потому что вы сделали те звонки, которые вы делали, которые не нужны.

После первого звонка, есть ли еще ссылка на Excel, работающую в фоновом режиме? Проверьте диспетчер задач, чтобы убедиться, что он запущен или закрыт.

Мне кажется очевидным, что он все еще открыт. Если он открыт, вы не можете открыть его снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...