#include
#include
#include
int main() {
CoInitialize(NULL);
CLSID clsid;
CLSIDFromProgID(L"Excel.Application", &clsid);
IDispatch *pXlApp;
CoCreateInstance(&clsid, NULL, CLSCTX_LOCAL_SERVER, &IID_IDispatch, (void )&pXlApp);
VARIANT result;
VariantInit(&result);
DISPID dispID;
OLECHAR *method = L"Workbooks";
pXlApp->lpVtbl->GetIDsOfNames(pXlApp, &IID_NULL, &method, 1, LOCALE_USER_DEFAULT, &dispID);
DISPPARAMS params = { NULL, NULL, 0, 0 };
pXlApp->lpVtbl->Invoke(pXlApp, dispID, &IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, ¶ms, &result, NULL, NULL);
IDispatch *pXlBooks = result.pdispVal;
method = L"Open";
pXlBooks->lpVtbl->GetIDsOfNames(pXlBooks, &IID_NULL, &method, 1, LOCALE_USER_DEFAULT, &dispID);
VARIANT xla;
xla.vt = VT_BSTR;
xla.bstrVal = SysAllocString(L"example.xlsx");
params.cArgs = 1;
params.rgvarg = &xla;
params.cNamedArgs = 0;
pXlBooks->lpVtbl->Invoke(pXlBooks, dispID, &IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, ¶ms, &result, NULL, NULL);
IDispatch *pXlBook = result.pdispVal;
method = L"Sheets";
pXlBook->lpVtbl->GetIDsOfNames(pXlBook, &IID_NULL, &method, 1, LOCALE_USER_DEFAULT, &dispID);
params.cArgs = 0;
params.rgvarg = NULL;
pXlBook->lpVtbl->Invoke(pXlBook, dispID, &IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, ¶ms, &result, NULL, NULL);
IDispatch *pXlSheets = result.pdispVal;
method = L"Item";
pXlSheets->lpVtbl->GetIDsOfNames(pXlSheets, &IID_NULL, &method, 1, LOCALE_USER_DEFAULT, &dispID);
VARIANT index;
index.vt = VT_I4;
index.lVal = 1;
params.cArgs = 1;
params.rgvarg = &index;
pXlSheets->lpVtbl->Invoke(pXlSheets, dispID, &IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, ¶ms, &result, NULL, NULL);
IDispatch *pXlSheet = result.pdispVal;
method = L"Cells";
pXlSheet->lpVtbl->GetIDsOfNames(pXlSheet, &IID_NULL, &method, 1, LOCALE_USER_DEFAULT, &dispID);
params.cArgs = 0;
pXlSheet->lpVtbl->Invoke(pXlSheet, dispID, &IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, ¶ms, &result, NULL, NULL);
IDispatch *pXlCells = result.pdispVal;
method = L"Item";
pXlCells->lpVtbl->GetIDsOfNames(pXlCells, &IID_NULL, &method, 1, LOCALE_USER_DEFAULT, &dispID);
VARIANT row, col;
row.vt = VT_I4;
col.vt = VT_I4;
for (int i = 1; i <= 10; ++i) {
for (int j = 1; j <= 5; ++j) {
row.lVal = i;
col.lVal = j;
VARIANT rgArgs[2] = { col, row };
params.cArgs = 2;
params.rgvarg = rgArgs;
pXlCells->lpVtbl->Invoke(pXlCells, dispID, &IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, ¶ms, &result, NULL, NULL);
printf("%St", result.bstrVal);
}
printf("n");
}
pXlApp->lpVtbl->Release(pXlApp);
CoUninitialize();
return 0;
}