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。
參考資料:





