SDK程序,没有用MFC。
用的是excel2003
// StatisticsGen.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
// Dispatch interface
IDispatch *pDispExcel;
// Temporary variable to hold names.
unsigned short *ucPtr;
// ClSID of excel
CLSID clsidExcel;
// Return value
HRESULT hr;
// Initialize OLE Libraries.
OleInitialize(NULL);
// Get CLSID for Excel.Application from registry.
hr = CLSIDFromProgID(L"Excel.Application", &clsidExcel);
if ( FAILED(hr) )
{
MessageBox(NULL, "Excel not registered.", "Error", MB_OK);
goto __exit;
}
///
// Start excel and get its IDispatch pointer.
hr = CoCreateInstance(clsidExcel, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void**)&pDispExcel);
if ( FAILED(hr) )
{
MessageBox(NULL, "Couldn't start Excel.", "Error", MB_OK);
goto __exit;
}
///
// Get the 'visible' property's DISPID.
DISPPARAMS dispParamsVisible = { NULL, NULL, 0, 0};
VARIANT parmVisible;
DISPID dispidNamed = DISPID_PROPERTYPUT;
DISPID dispVisible;
ucPtr = L"Visible";
pDispExcel->GetIDsOfNames(IID_NULL, &ucPtr, 1, LOCALE_USER_DEFAULT, &dispVisible);
// Initialize parameters to set visible property to true.
VariantInit(&parmVisible);
parmVisible.vt = VT_I4;
parmVisible.llVal = 1;
// One argument.
dispParamsVisible.cArgs = 1;
dispParamsVisible.rgvarg = &parmVisible;
// Handle special-case for property-puts!
dispParamsVisible.cNamedArgs = 1;
dispParamsVisible.rgdispidNamedArgs = &dispidNamed;
// Set 'visible' property to true.
hr = pDispExcel->Invoke(dispVisible, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYPUT | DISPATCH_METHOD,
&dispParamsVisible, NULL, NULL, NULL);
VariantClear(&parmVisible);
if(FAILED(hr))
{
MessageBox(NULL, "Set visible!", "Failed!", MB_OK);
goto __exit;
}
/
OLECHAR* szGetBooks = L"Workbooks";
DISPID dispGetWorkbooks;
VARIANT varBooks;
hr = pDispExcel->GetIDsOfNames(IID_NULL, &szGetBooks, 1, LOCALE_USER_DEFAULT, &dispGetWorkbooks);
if ( FAILED(hr) )
goto __exit;
DISPPARAMS dispParamsForGetBooks = { NULL, NULL, 0, 0};
hr = pDispExcel->Invoke(dispGetWorkbooks, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYGET | DISPATCH_METHOD,
&dispParamsForGetBooks, &varBooks, NULL, NULL);
if ( FAILED(hr) )
goto __exit;
///
// Open
IDispatch* pDispBooks;
IDispatch* pDispBook;
if ( varBooks.vt != VT_DISPATCH)
goto __exit;
else
{
// Get workbooks dispatch interface
pDispBooks = varBooks.pdispVal;
// Open
VARIANT varRetBook;
VARIANTARG varg;
varg.vt = VT_BSTR;
varg.bstrVal = _bstr_t("c://bool.xls");
DISPPARAMS dpOpen= { &varg, NULL, 1, 0 };
LPOLESTR lpOpen = L"Open";
DISPID dispOpen;
hr = pDispBooks->GetIDsOfNames(IID_NULL, &lpOpen, 1, LOCALE_USER_DEFAULT, &dispOpen);
if ( FAILED(hr) )
goto __exit;
hr = pDispBooks->Invoke(dispOpen, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYGET | DISPATCH_METHOD,
&dpOpen, &varRetBook, NULL, NULL);
if ( FAILED(hr) )
goto __exit;
if ( varRetBook.vt != VT_DISPATCH )
goto __exit;
else
pDispBook = varRetBook.pdispVal;
}
// worksheets
IDispatch* pDispSheets;
if ( pDispBook != NULL )
{
DISPPARAMS dpSheets = {NULL, NULL, 0, 0};
DISPID dispSheets;
LPOLESTR lpSheets = L"Worksheets";
VARIANT varRetSheets;
hr = pDispBook->GetIDsOfNames(IID_NULL, &lpSheets, 1, LOCALE_USER_DEFAULT, &dispSheets);
if ( FAILED(hr) )
goto __exit;
hr = pDispBook->Invoke(dispSheets, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYGET | DISPATCH_METHOD,
&dpSheets, &varRetSheets, NULL, NULL);
if ( FAILED(hr) )
goto __exit;
if ( varRetSheets.vt != VT_DISPATCH )
goto __exit;
else
pDispSheets = varRetSheets.pdispVal;
}
///
// worksheet
IDispatch* pDispSheet;
if ( pDispSheets != NULL )
{
VARIANT varRetSheet;
VARIANTARG vargSheet;
vargSheet.vt = VT_I4;
vargSheet.intVal = 1;
DISPPARAMS dpSheet = { &vargSheet, NULL, 1, 0 };
LPOLESTR lpSheet = L"Item";
DISPID dispSheet;
hr = pDispSheets->GetIDsOfNames(IID_NULL, &lpSheet, 1, LOCALE_USER_DEFAULT, &dispSheet);
if ( FAILED(hr) )
goto __exit;
hr = pDispSheets->Invoke(dispSheet, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET | DISPATCH_METHOD,
&dpSheet, &varRetSheet, NULL, NULL);
if ( FAILED(hr) )
goto __exit;
if ( varRetSheet.vt != VT_DISPATCH )
goto __exit;
else
pDispSheet = varRetSheet.pdispVal;
}
///
IDispatch* pDispRange;
if ( pDispSheet != NULL )
{
LPOLESTR lpCells = L"Cells";
DISPPARAMS dpCells = { NULL, NULL, 0, 0 };
DISPID dispCells;
VARIANT varRetRange;
hr = pDispSheet->GetIDsOfNames(IID_NULL, &lpCells, 1, LOCALE_USER_DEFAULT, &dispCells);
if ( FAILED(hr) )
goto __exit;
hr = pDispSheet->Invoke(dispCells, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET | DISPATCH_METHOD,
&dpCells, &varRetRange, NULL, NULL);
if ( FAILED(hr) )
goto __exit;
if ( varRetRange.vt != VT_DISPATCH )
goto __exit;
else
pDispRange = varRetRange.pdispVal;
}
///
// put value in Item property
if ( pDispRange != NULL )
{
LPOLESTR lpRangeItem = L"Item";
DISPID dispRangeItem;
hr = pDispRange->GetIDsOfNames(IID_NULL, &lpRangeItem, 1, LOCALE_USER_DEFAULT, &dispRangeItem);
if ( FAILED(hr) )
goto __exit;
VARIANT* vargRangeItem = new VARIANT[3];
for ( int i = 0; i < 3; i ++ )
VariantInit(&vargRangeItem[i]);
vargRangeItem[0].vt = VT_I4;
vargRangeItem[0].intVal = 1;
vargRangeItem[1].vt = VT_I4;
vargRangeItem[1].intVal = 1;
vargRangeItem[2].vt = VT_I4;
vargRangeItem[2].intVal = 1;
DISPPARAMS dpRangeItem = {NULL, NULL, 0, 0};
dpRangeItem.cArgs = 3;
dpRangeItem.rgvarg = vargRangeItem;
dpRangeItem.cNamedArgs = 1;
DISPID dispIDRangeItem = DISPID_PROPERTYPUT;
dpRangeItem.rgdispidNamedArgs = &dispIDRangeItem;
EXCEPINFO except;
hr = pDispRange->Invoke(dispRangeItem, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYPUT | DISPATCH_METHOD,
&dpRangeItem, NULL, &except, NULL);
delete []vargRangeItem;
if ( FAILED(hr) )
goto __exit;
}
///
// Save
if ( pDispBook )
{
LPOLESTR lpBookSave = L"Save";
DISPID dispIDBookSave;
hr = pDispBook->GetIDsOfNames(IID_NULL, &lpBookSave, 1, LOCALE_USER_DEFAULT, &dispIDBookSave);
if ( FAILED(hr) )
goto __exit;
DISPPARAMS dispBookSave = { NULL, NULL, 0, 0 };
hr = pDispBook->Invoke(dispIDBookSave, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &dispBookSave, NULL, NULL, NULL);
if ( FAILED(hr) )
goto __exit;
}
///
// quit
if ( pDispExcel )
{
LPOLESTR lpExcelQuit = L"Quit";
DISPID dispIDExcelQuit;
hr = pDispExcel->GetIDsOfNames(IID_NULL, &lpExcelQuit, 1, LOCALE_USER_DEFAULT, &dispIDExcelQuit);
if ( FAILED(hr) )
goto __exit;
DISPPARAMS dispExcelQuit = { NULL, NULL, 0, 0 };
hr = pDispExcel->Invoke(dispIDExcelQuit, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &dispExcelQuit,
NULL, NULL, NULL);
if ( FAILED(hr) )
goto __exit;
}
__exit:
if ( pDispRange )
pDispRange->Release();
if ( pDispSheet )
pDispSheet->Release();
if ( pDispSheets )
pDispSheets->Release();
if ( pDispBook )
pDispBook->Release();
if ( pDispBooks )
pDispBooks->Release();
if ( pDispExcel )
pDispExcel->Release();
OleUninitialize();
return 0;
}