如何用c语言读读取excel

如何用c语言读读取excel

#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;

}

相关推荐

高级工程师职称有什么用?含金量高吗?
365bet大陆网站

高级工程师职称有什么用?含金量高吗?

📅 09-08 👁️ 6907
win10电脑怎么限制网速?简单几步轻松设置网络限速
足球365官网正规吗

win10电脑怎么限制网速?简单几步轻松设置网络限速

📅 09-03 👁️ 2693
合字的成语有哪些
365bet大陆网站

合字的成语有哪些

📅 11-06 👁️ 2672