1 回答

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊
我以前寫(xiě)過(guò)一個(gè)應(yīng)用,比較復(fù)雜,而且還是VC++ 6.0的,等明天我給你傳個(gè)簡(jiǎn)單的。
我新建了一個(gè)Win32 控制臺(tái)程序,在 stdafx.h 的結(jié)尾處添加:
#import "c:\\Program Files\\Common Files\\Microsoft Shared\\OFFICE12\\MSO.DLL" rename_namespace("Office")
using namespace Office;
#import "c:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.olb" rename_namespace("VBE6")
using namespace VBE6;
#import "c:\\Program Files\\Microsoft Office\\OFFICE12\\EXCEL.EXE" rename("DialogBox", "DialogBoxXL") rename("RGB", "RBGXL") rename("DocumentProperties", "DocumentPropertiesXL") exclude ("IFont","IPicture"),rename_namespace("MSExcel")
using namespace MSExcel;
#import "c:\\Program Files\\Common Files\\Designer\\msaddndr.dll" raw_interfaces_only, raw_native_types, no_namespace, named_guids
下面的為對(duì)Excel的操作代碼:
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
// 初始化 MFC 并在失敗時(shí)顯示錯(cuò)誤
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: 更改錯(cuò)誤代碼以符合您的需要
_tprintf(_T("錯(cuò)誤: MFC 初始化失敗\n"));
nRetCode = 1;
}
else
{
// TODO: 在此處為應(yīng)用程序的行為編寫(xiě)代碼。
HRESULT hr=NULL;
// 初始化 COM 庫(kù)
hr = CoInitialize(NULL);
if(FAILED(hr))
{
_tprintf(_T("錯(cuò)誤: COM 初始化失敗\n"));
nRetCode = 1;
return nRetCode;
}
LPDISPATCH lpDisp=NULL;
CLSID clsid;
::COleDispatchDriver codd;
COleException* pError=new COleException;
// 獲得EXCEL的CLSID
::CLSIDFromProgID(L"Excel.Application",&clsid);
// 打開(kāi) Excel Application 。
if(!codd.CreateDispatch(clsid,pError))
{
pError->Delete();
_tprintf(_T("錯(cuò)誤: 打開(kāi) Excel Application 失敗\n"));
nRetCode = 1;
return nRetCode;
}
CComQIPtr <MSExcel::_Application> pApp(codd.m_lpDispatch);
// 顯示 Excell Application。
pApp->PutVisible(0,TRUE);
codd.ReleaseDispatch();
CComQIPtr <MSExcel::Workbooks> pCurDocs;
CComQIPtr <MSExcel::_Workbook> pCurDoc;
CComQIPtr <MSExcel::_Worksheet> pCurSheet;
CComQIPtr <MSExcel::Range> pCurRange;
COleVariant vTrue((short)TRUE),vFalse((short)FALSE);
COleVariant vNull(L"");
COleVariant vZero((short)0);
COleVariant vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
// 保存文件名。
COleVariant vDocName(L"CppUseExcel.xlsx");
// 獲取 Workbooks。
pCurDocs=pApp->GetWorkbooks();
// 新建空白工簿。
pCurDoc=pCurDocs->Add(vNull,0);
// 獲取 Sheet1 。
pCurSheet = pCurDoc->Sheets->GetItem(1);
// 獲取 Sheet1 的 A1 單元格,并填寫(xiě)初始值.
pCurRange = pCurSheet->GetRange(L"A1");
int initValue = 1234;
pCurRange->FormulaR1C1 = initValue;
// 獲取 Sheet1 的 A1 單元格的值.
int nValueA1 = pCurRange->GetValue2();
// 獲取 [C2,E5] 單元格,并填寫(xiě)初始值.
pCurRange = pCurSheet->GetRange(L"C2",L"E5");
pCurRange->FormulaR1C1 = initValue;
// 獲取 Sheet1 的 [C2,E5] 單元格的值.
_variant_t vC2E5= pCurRange->GetValue2();
// 獲取 Sheet2 ,并將 Sheet1 A1 單元格的值乘以 2 后填入 Sheet2 的 A1 單元格.
// Sheet1 [C2,E5] 單元格的值乘以 2 后填入 Sheet2 的 [C2,E5] 單元格.
pCurSheet = pCurDoc->Sheets->GetItem(2);
pCurRange = pCurSheet->GetRange(L"A1");
pCurRange->FormulaR1C1 = nValueA1 *2;
pCurRange = pCurSheet->GetRange(L"C2",L"E5");
// 這里涉及到對(duì) SAFEARRAY 中元素的操作,暫時(shí)不寫(xiě),如果你確定是
// 在 Range [C2,E5] 中填寫(xiě)數(shù)組,我再寫(xiě)這個(gè)過(guò)程.
pCurRange->FormulaR1C1 =vC2E5;
hr = pCurDoc->SaveAs(
vDocName,
xlOpenXMLWorkbook,
vOptional,
vOptional,
vFalse,
vFalse,
xlNoChange,
xlLocalSessionChanges,
vOptional,
vOptional,
vOptional,
vOptional);
if(FAILED(hr))
{
_tprintf(_T("錯(cuò)誤: 保存 Excel 文檔失敗\n"));
pError->Delete();
pApp->Quit();
nRetCode = 1;
return nRetCode;
}
pError->Delete();
pApp->Quit();
}
return nRetCode;
}
- 1 回答
- 0 關(guān)注
- 502 瀏覽
添加回答
舉報(bào)