MFC 對excel2007簡單操作

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;

// 初始化 MFC 並在失敗時顯示錯誤
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: 更改錯誤代碼以符合您的需要
_tprintf(_T("錯誤: MFC 初始化失敗\n"));
nRetCode
= 1;
}
else
{
// TODO: 在此處爲應用程序的行爲編寫代碼。
HRESULT hr=NULL;

// 初始化 COM 庫
hr = CoInitialize(NULL);
if(FAILED(hr))
{
_tprintf(_T(
"錯誤: COM 初始化失敗\n"));
nRetCode
= 1;
return nRetCode;
}

LPDISPATCH lpDisp
=NULL;
CLSID clsid;
::COleDispatchDriver codd;
COleException
* pError=new COleException;

// 獲得EXCEL的CLSID
::CLSIDFromProgID(L"Excel.Application",&clsid);

// 打開 Excel Application 。
if(!codd.CreateDispatch(clsid,pError))
{
pError
->Delete();
_tprintf(_T(
"錯誤: 打開 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 單元格,並填寫初始值.
pCurRange = pCurSheet->GetRange(L"A1");
int initValue = 1234;
pCurRange
->FormulaR1C1 = initValue;

// 獲取 Sheet1 的 A1 單元格的值.
int nValueA1 = pCurRange->GetValue2();

// 獲取 [C2,E5] 單元格,並填寫初始值.
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");

// 這裏涉及到對 SAFEARRAY 中元素的操作,暫時不寫,如果你確定是
// 在 Range [C2,E5] 中填寫數組,我再寫這個過程.
pCurRange->FormulaR1C1 =vC2E5;

hr
= pCurDoc->SaveAs(
vDocName,
xlOpenXMLWorkbook,
vOptional,
vOptional,
vFalse,
vFalse,
xlNoChange,
xlLocalSessionChanges,
vOptional,
vOptional,
vOptional,
vOptional);

if(FAILED(hr))
{
_tprintf(_T(
"錯誤: 保存 Excel 文檔失敗\n"));
pError
->Delete();
pApp
->Quit();
nRetCode
= 1;
return nRetCode;
}

pError
->Delete();
pApp
->Quit();
}

return nRetCode;
}
發佈了16 篇原創文章 · 獲贊 8 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章