🎊 c 语言如何读取excel文件

c 语言如何读取excel文件

#include

#include

#include

#include

#include

#import "C:\Program Files (x86)\Microsoft Office\Office15\EXCEL.EXE" rename("RGB", "ExcelRGB")

void read_excel(const char *file_name) {

HRESULT hr;

CLSID clsid;

IDispatch *pXlApp = NULL;

IDispatch *pXlBooks = NULL;

IDispatch *pXlBook = NULL;

IDispatch *pXlSheet = NULL;

IDispatch *pXlRange = NULL;

VARIANT result;

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

if (FAILED(hr)) {

printf("CLSIDFromProgID failedn");

return;

}

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

if (FAILED(hr)) {

printf("CoCreateInstance failedn");

return;

}

// Make Excel application visible

VariantInit(&result);

result.vt = VT_BOOL;

result.boolVal = VARIANT_TRUE;

hr = pXlApp->lpVtbl->PutProperty(pXlApp, L"Visible", &result);

if (FAILED(hr)) {

printf("Failed to make Excel visiblen");

return;

}

// Get Workbooks collection

VariantInit(&result);

hr = pXlApp->lpVtbl->GetProperty(pXlApp, L"Workbooks", &result);

if (FAILED(hr)) {

printf("Failed to get Workbooks collectionn");

return;

}

pXlBooks = result.pdispVal;

// Open the Excel file

VARIANT vtFileName;

vtFileName.vt = VT_BSTR;

vtFileName.bstrVal = _bstr_t(file_name);

hr = pXlBooks->lpVtbl->Invoke(pXlBooks, L"Open", &vtFileName, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &result);

if (FAILED(hr)) {

printf("Failed to open Excel filen");

return;

}

pXlBook = result.pdispVal;

// Get the first sheet

VariantInit(&result);

hr = pXlBook->lpVtbl->GetProperty(pXlBook, L"Worksheets", &result);

if (FAILED(hr)) {

printf("Failed to get Worksheets collectionn");

return;

}

pXlSheet = result.pdispVal;

VARIANT vtIndex;

vtIndex.vt = VT_I4;

vtIndex.lVal = 1;

hr = pXlSheet->lpVtbl->Invoke(pXlSheet, L"Item", &vtIndex, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &result);

if (FAILED(hr)) {

printf("Failed to get the first sheetn");

return;

}

pXlSheet = result.pdispVal;

// Get the used range

VariantInit(&result);

hr = pXlSheet->lpVtbl->GetProperty(pXlSheet, L"UsedRange", &result);

if (FAILED(hr)) {

printf("Failed to get the used rangen");

return;

}

pXlRange = result.pdispVal;

// Read the range

// (This is a simplified example, you may need to iterate through rows and columns)

VariantInit(&result);

hr = pXlRange->lpVtbl->GetProperty(pXlRange, L"Value", &result);

if (FAILED(hr)) {

printf("Failed to get the range valuen");

return;

}

// Print the value

if (result.vt == (VT_ARRAY | VT_VARIANT)) {

SAFEARRAY *psa = result.parray;

VARIANT *pData;

SafeArrayAccessData(psa, (void )&pData);

printf("Cell[1,1]: %lsn", pData[0].bstrVal);

SafeArrayUnaccessData(psa);

}

// Clean up

pXlRange->lpVtbl->Release(pXlRange);

pXlSheet->lpVtbl->Release(pXlSheet);

pXlBook->lpVtbl->Release(pXlBook);

pXlBooks->lpVtbl->Release(pXlBooks);

pXlApp->lpVtbl->Release(pXlApp);

}

int main() {

HRESULT hr = CoInitialize(NULL);

if (FAILED(hr)) {

printf("Failed to initialize COM libraryn");

return 1;

}

const char *file_name = "example.xlsx";

read_excel(file_name);

CoUninitialize();

return 0;

}

🎈 相关推荐

《宝可梦剑盾》光柱巢穴攻略 刷新机制分享
🏷️ Bet体育365提款验证

《宝可梦剑盾》光柱巢穴攻略 刷新机制分享

📅 08-09 👀 1359
少年西游记红将阵容 少年西游记红将搭配
🏷️ Bet体育365提款验证

少年西游记红将阵容 少年西游记红将搭配

📅 07-21 👀 4131
赊贳是什么意思
🏷️ beat365登录平台

赊贳是什么意思

📅 08-03 👀 9905
野外的蜜蜂怎么收?
🏷️ office365桌面应用

野外的蜜蜂怎么收?

📅 07-16 👀 7797
1兆等于多少?1兆等于多少MB?
🏷️ beat365登录平台

1兆等于多少?1兆等于多少MB?

📅 07-16 👀 4907
28楼层风水好不好,如何看待高层住宅
🏷️ office365桌面应用

28楼层风水好不好,如何看待高层住宅

📅 07-23 👀 696