c语言如何读excle

c语言如何读excle

#include

#include

#include

#include

void read_excel(const wchar_t *filename) {

HRESULT hr;

CLSID clsid;

IDispatch *pXlApp = NULL, *pXlBooks = NULL, *pXlBook = NULL, *pXlSheet = NULL;

VARIANT result, param;

CoInitialize(NULL);

// 获取 Excel 应用程序的 CLSID

hr = CLSIDFromProgID(L"Excel.Application", &clsid);

if (FAILED(hr)) {

printf("Failed to get CLSID!n");

return;

}

// 创建 Excel 应用程序实例

hr = CoCreateInstance(&clsid, NULL, CLSCTX_LOCAL_SERVER, &IID_IDispatch, (void)&pXlApp);

if (FAILED(hr)) {

printf("Failed to create Excel instance!n");

return;

}

// 获取 Workbooks 集合

hr = AutoWrap(DISPATCH_PROPERTYGET, &result, pXlApp, L"Workbooks", 0);

if (FAILED(hr)) {

printf("Failed to get Workbooks collection!n");

pXlApp->lpVtbl->Release(pXlApp);

return;

}

pXlBooks = result.pdispVal;

// 打开 Excel 文件

param.vt = VT_BSTR;

param.bstrVal = SysAllocString(filename);

hr = AutoWrap(DISPATCH_METHOD, &result, pXlBooks, L"Open", 1, param);

SysFreeString(param.bstrVal);

if (FAILED(hr)) {

printf("Failed to open Excel file!n");

pXlBooks->lpVtbl->Release(pXlBooks);

pXlApp->lpVtbl->Release(pXlApp);

return;

}

pXlBook = result.pdispVal;

// 获取第一个工作表

hr = AutoWrap(DISPATCH_PROPERTYGET, &result, pXlBook, L"Worksheets", 0);

if (FAILED(hr)) {

printf("Failed to get Worksheets collection!n");

pXlBook->lpVtbl->Release(pXlBook);

pXlBooks->lpVtbl->Release(pXlBooks);

pXlApp->lpVtbl->Release(pXlApp);

return;

}

IDispatch *pXlSheets = result.pdispVal;

hr = AutoWrap(DISPATCH_PROPERTYGET, &result, pXlSheets, L"Item", 1, 1);

pXlSheets->lpVtbl->Release(pXlSheets);

if (FAILED(hr)) {

printf("Failed to get Worksheet!n");

pXlBook->lpVtbl->Release(pXlBook);

pXlBooks->lpVtbl->Release(pXlBooks);

pXlApp->lpVtbl->Release(pXlApp);

return;

}

pXlSheet = result.pdispVal;

// 获取单元格内容

hr = AutoWrap(DISPATCH_PROPERTYGET, &result, pXlSheet, L"Cells", 2, 1, 1);

pXlSheet->lpVtbl->Release(pXlSheet);

if (FAILED(hr)) {

printf("Failed to get Cell!n");

pXlBook->lpVtbl->Release(pXlBook);

pXlBooks->lpVtbl->Release(pXlBooks);

pXlApp->lpVtbl->Release(pXlApp);

return;

}

IDispatch *pXlCell = result.pdispVal;

hr = AutoWrap(DISPATCH_PROPERTYGET, &result, pXlCell, L"Value", 0);

pXlCell->lpVtbl->Release(pXlCell);

if (FAILED(hr)) {

printf("Failed to get Cell value!n");

} else {

wprintf(L"Cell value: %sn", result.bstrVal);

SysFreeString(result.bstrVal);

}

// 关闭 Excel 文件

hr = AutoWrap(DISPATCH_METHOD, &result, pXlBook, L"Close", 0);

pXlBook->lpVtbl->Release(pXlBook);

pXlBooks->lpVtbl->Release(pXlBooks);

pXlApp->lpVtbl->Release(pXlApp);

CoUninitialize();

}

int main() {

read_excel(L"test.xlsx");

return 0;

}

相关推荐

[新手指引]梦幻西游新手攻略:30-39级升级指引
开彩365下载安装

[新手指引]梦幻西游新手攻略:30-39级升级指引

📅 07-30 👁️ 7408
《京东》写备注方法
开彩365下载安装

《京东》写备注方法

📅 07-08 👁️ 5257
家具基础
365bet官网平台

家具基础

📅 07-08 👁️ 5599
西游记 (动画)
开彩365下载安装

西游记 (动画)

📅 08-11 👁️ 7897
魔鬼恋人
365bet官网平台

魔鬼恋人

📅 07-25 👁️ 6558
陆贞传奇有多少集
365bet官网平台

陆贞传奇有多少集

📅 08-03 👁️ 6152