Re: [問題] 終止處理程序中的Excel.exe
看板C_and_CPP (C/C++)作者hyc325 (SONY VAIO-FE25TP)時間15年前 (2010/12/08 23:13)推噓2(2推 0噓 6→)留言8則, 1人參與討論串3/5 (看更多)
我所使用的新增sheet方式是以下方法:
宣告省略......
sheet=sheets.GetItem(COleVariant((short)(3)));
sheet.Activate();
COleVariant vBefore,vAfter,vCount,vType;
//Default
vBefore.vt=VT_ERROR;
vBefore.scode=DISP_E_PARAMNOTFOUND;
//Insert next to active sheet
vAfter.vt=VT_DISPATCH;
vAfter.pdispVal=book.GetActiveSheet();
//Insert 1 sheet
vCount.vt=VT_I2;
vCount.iVal=1;
//Insert a Worksheet object
vType.vt=VT_I2;
vType.iVal=-4167; // xlWorksheet
sheets.Add(vBefore,vAfter,vCount,vType);
這方法我是google來的 以OLE新增sheet
可以連續新增好幾筆 但是sheet順序名稱會錯誤
ex:連續在sheet3後新增兩個會變成sheet3 sheet5 sheet4
因此跑上述的迴圈每次抓最後一個sheet並且active才使得名稱正確
但是只要有使用Add的指令 最後在處理程序中留下EXCEL.EXE
導致該存檔檔案無法正常開啟
我在codeguru有看到一樣的問題點:
http://www.codeguru.com/forum/archive/index.php/t-242418.html
If I don't add a new Worksheet, The program works fine.
But if I add or insert a new Worksheet, the Excel.exe is not able
to get killed when I exit this method.
What is wrong in my code? Thanks for your help.
我是看不太出來有解決問題XD 所以想說能不能直接將應用程序強制刪除
用版友提供的system("taskkill /f /im EXCEL.EXE")是可以達成
只是畫面會出現類似命令提示字元的視窗閃一下
但是主要問題是可以解決掉 我會再試試看版友的方法
另外有問到操作EXCEL的方法 這google到蠻多用以下方法的
在ClassWizard中以Automation方式去將EXCEL.EXE產生excel.cpp及.h
並且加入至專案中 然後以下開啟與關閉
_Application app;
Workbooks books;
_Workbook book;
Worksheets sheets;
_Worksheet sheet;
COleVariant covOptional(DISP_E_PARAMNOTFOUND,VT_ERROR);
if(::CoInitialize(NULL)==E_INVALIDARG)
AfxMessageBox(_T("COM初始化失敗!!"));
if(!app.CreateDispatch("Excel.Application"))
AfxMessageBox("EXCEL初始化失敗!!");
books=app.GetWorkbooks();//讀取工作簿集合
book=books.Add(covOptional);//增加workbook
sheets=book.GetWorksheets();//讀取工作表集合
app.Quit();
app.ReleaseDispatch();
照前面codeguru中的說法是 若未執行Add增加sheet
則在app.Quit()後處理程序會正常刪除
但有插入sheet則會無法刪除程序 跟我自己測的時候問題一樣!!
此方式產生我是以2007的EXCEL.EXE產生 向下相容測過可行 但向上不可
最早之前我寫EXCEL操作是用日文網站提供的方式
http://www.ujasiri.com/prglib/vc/vc.html
參照Excel操作篇 用#import方式操作EXCEL
不過此操作並無任何處理程序問題反倒是有版本問題
那時候有去客戶電腦測試
安裝Office 2003的電腦可正常執行 但是Office 2000的就一定當機
所以軟體後來改回以VBA寫(非我負責)
最近要新寫轉檔程式 因此放棄此方法重新survey
是還有找到啥ODBC的方式 不過以OLE方法似乎蠻多人用的
所以也就以此方法嘗試
是還有碰到大量數值輸入需以COLESafeArray方式處理的
不過這還好沒有上面處理程序的問題棘手
以上提供我所瞭解的資訊
若有版友願意提供其他vc操作excel方式 我有機會也可試試看
感謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.225.18.160
※ 編輯: hyc325 來自: 125.225.18.160 (12/08 23:15)
※ 編輯: hyc325 來自: 125.225.18.160 (12/08 23:16)
推
12/09 02:58, , 1F
12/09 02:58, 1F
→
12/09 02:59, , 2F
12/09 02:59, 2F
→
12/09 03:00, , 3F
12/09 03:00, 3F
→
12/09 03:00, , 4F
12/09 03:00, 4F
→
12/09 03:40, , 5F
12/09 03:40, 5F
→
12/09 03:40, , 6F
12/09 03:40, 6F
推
12/09 04:17, , 7F
12/09 04:17, 7F
→
12/09 04:17, , 8F
12/09 04:17, 8F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 3 之 5 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章