Re: [問題] 終止處理程序中的Excel.exe

看板C_and_CPP (C/C++)作者 (SONY VAIO-FE25TP)時間15年前 (2010/12/08 23:13), 編輯推噓2(206)
留言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
當時開發我是用office 2007,包出來的 class 就一直都
12/09 02:59, 2F

12/09 03:00, , 3F
沒變過,目前測試過office2003,2007,2010.不過2000就沒
12/09 03:00, 3F

12/09 03:00, , 4F
測過。
12/09 03:00, 4F

12/09 03:40, , 5F
彈出console視窗的話可用 WinExec取代system.詳查
12/09 03:40, 5F

12/09 03:40, , 6F
MSDN.
12/09 03:40, 6F

12/09 04:17, , 7F
另如果不介意的話,是否可從初始化到新增Sheets到關閉
12/09 04:17, 7F

12/09 04:17, , 8F
excel 貼出來呢?也許是其它地方有問題..
12/09 04:17, 8F
文章代碼(AID): #1C_w2OFI (C_and_CPP)
文章代碼(AID): #1C_w2OFI (C_and_CPP)