1. 開啟VC專案,引用Excel程式碼。
「View」→「ClassWizard」。
「Add Class」→「From a type library」。
切換到 Excel.exe路徑「C:\Program Files\Microsoft Office\Office14」。
選擇要使用到的 Class:_Application、Workbooks、_Workbook、_Worksheet、Worksheets、Range
點選確認,就會在專案中看到 Excel.cpp、Excel.h。
Excel工作表階層。
2. 輸入以下程式。
void runExcel(CString sourceFile, CString saveasFile) { /*if (!AfxOleInit()) { AfxMessageBox("初始化Ole出錯!"); return ; }*/ if (::CoInitialize( NULL ) == E_INVALIDARG) { AfxMessageBox(_T("無法初始化COM的DLL")); return ; } _Application excel; COleException *e = new COleException; //建立Excel檔案 try { if (!excel.CreateDispatch("Excel.Application", e)) //建立Excel 2000檔案 throw e; } catch(COleDispatchException *e) { CString csTmp; if(!e->m_strSource.IsEmpty()) csTmp = e->m_strSource + "-"; if(!e->m_strDescription.IsEmpty()) csTmp += e->m_strDescription; else csTmp += "unknown error"; AfxMessageBox(csTmp, MB_OK, e->m_strHelpFile.IsEmpty() ? 0: e->m_dwHelpContext); e->Delete(); } excel.SetVisible(TRUE); COleVariant FilenameSave(saveasFile), Fileformat((short)51), covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); TRY { Workbooks workBooks; _Workbook _Workbook; _Worksheet _workSheet; Worksheets workSheets; Range range; //LPDISPATCH lpDisp; //取得工作簿集合 workBooks= excel.GetWorkbooks(); //lpDisp = excel.GetWorkbooks(); //workBooks.AttachDispatch(lpDisp); //取得工作簿,並開啟檔案 _Workbook = workBooks.Open(sourceFile, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional); //取得工作表集合 workSheets = _Workbook.GetSheets(); //_Workbook.AttachDispatch(lpDisp); //workSheets.AttachDispatch(_Workbook.GetSheets()); //取得第一個工作表 _workSheet = workSheets.GetItem(COleVariant((short)1)); //_workSheet.AttachDispatch(workSheets.GetItem(COleVariant((short)1))); //選擇工作表中A列 range = _workSheet.GetRange(COleVariant("A1"), COleVariant("A65536")); //range.AttachDispatch(_workSheet.GetRange(COleVariant("A1"), COleVariant("A65536"))); //設定儲存格格式 range.SetNumberFormat(COleVariant("000000")); _Workbook.SetSaved(TRUE); DeleteFile(saveasFile); //另存新檔 _Workbook.SaveAs(FilenameSave, Fileformat, covOptional, covOptional, covOptional, covOptional, 0, covOptional, covOptional, covOptional, covOptional, covOptional); //釋放資源 range.ReleaseDispatch(); workSheets.ReleaseDispatch(); _workSheet.ReleaseDispatch(); workBooks.ReleaseDispatch(); _Workbook.ReleaseDispatch(); workBooks.Close(); } CATCH(COleDispatchException, e) { TRACE(e->m_strDescription); } END_CATCH; excel.Quit(); excel.ReleaseDispatch(); ::CoUninitialize(); }程式碼說明:
21行:依據字串不同,建立不同版本Excel。
53行:等同54、55行。
65行:等同66、67行。
70行:等同71行。
74行:等同75行。
58~62行、85~96行:依據使用者所選定的Excel版本而有不同數量的參數。
開啟一個Excel檔案,在 A1、A2、A2 儲存格分別輸入 1、2、3,執行程式讓 A1、A2、A2 的內容變成為 000001、000002、000003。
參考資料: