VC程式碼解讀,新建或者開啟EXCEL檔案
阿新 • • 發佈:2019-01-08
之前做操作EXCEL檔案也有好幾次了,但是每次都是從網文上覆制貼上,從沒有自己仔細研究過,所以遇到問題也只從網上尋找答案,一點自己的見解也沒有,意識到這種方式不可取,才有了這篇文章。大神飄過即可,希望對於像我一樣的菜鳥們有所幫助
//新建一個Excel表格,並對其進行編輯,宣告使用的各變數 CApplication _app;//指向的是EXCEL程式 CWorkbooks workbooks;//所有workbook的集合,或者指的是所有excel檔案的集合? CWorkbook workbook;//指的是某一個excel檔案,或者說該檔案中所有worksheet的集合 CWorksheets worksheets;//指的是某一個檔案中worksheet可控制的集合 CWorksheet worksheet;//指的是某一個worksheet,或者說該worksheet中所有單元格的集合 CRange range;//某一個worksheet中可控制的單元格的集合 LPDISPATCH lpDisp; COleVariant vResult((long)DISP_E_PARAMNOTFOUND,VT_ERROR); COleVariant valTemp((long)DISP_E_PARAMNOTFOUND,VT_ERROR); //進行預備工作,該函式的工作原理是 //查詢登錄檔中的HKEY_CLASSES_ROOT/CLSID 各項中的ProgID是否和Excel.Application匹配,匹配則查詢該目錄下的LocalServer,其中包含了excel的exe檔案目錄,進行啟動 if(!_app.CreateDispatch(L"Excel.Application")) { MessageBox(L"啟動excel程式失敗",L"提示",0); return; } //獲得所有工作表 workbooks.AttachDispatch(_app.get_Workbooks()); //新建工作表,必須指出的是valTemp必須是賦值之後的!!!!,否則不能通過 workbook.AttachDispatch(workbooks.Add(valTemp)); /////////////////////////////////////////////////////////////////////////////////////////////////////////////// // 若是開啟已有檔案 /////// // lpDisp = workbooks.Open(L"D:\\3.xlsx",valTemp, valTemp, valTemp, valTemp, valTemp,valTemp, /////// // valTemp, valTemp, valTemp, valTemp,valTemp, valTemp, valTemp,valTemp); //////// //得到Workbook /////// //workbook.AttachDispatch(lpDisp); /////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////// //獲得該工作表的worksheets worksheets.AttachDispatch(workbook.get_Worksheets()); //獲得第二個worksheet!!!!!!!!!!!!!!!!!!!!!!!!!! worksheet.AttachDispatch(worksheets.get_Item(COleVariant((long)2))); //初始化range,使之指向該worksheet的範圍內 range.AttachDispatch(worksheet.get_Cells()); range.AttachDispatch(range.get_Item(COleVariant((long)1), COleVariant((long)2)).pdispVal); range.put_Value2(COleVariant(L"測試")); //將在記憶體中建立的excel檔案儲存到磁碟上,或者說將從磁碟上讀取到的檔案,處理之後儲存為其他的檔案 workbook.SaveAs(COleVariant(L"D:\\temp.xlsx"),vResult,vResult,vResult,vResult,vResult,0,vResult,vResult,vResult,vResult,vResult); range.ReleaseDispatch(); worksheet.ReleaseDispatch(); worksheets.ReleaseDispatch(); workbook.ReleaseDispatch(); workbooks.ReleaseDispatch(); //必須是這種順序,程式執行後,EXCEL程序才能被關閉 _app.Quit(); _app.ReleaseDispatch();
PS:經過這次的整理,自己有了較大的提高,至少知道了,每個語句的作用,當然註釋中有的是自己的理解,水平有限,希望大神指正!