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;

}

猜你喜欢

南瓜贷款平台:正规低息快速放款,资质审核全解析
长城特7精密仪表脂
365bet备用线路

长城特7精密仪表脂

📅 01-25 ❤️ 164
电视剧云巅之上什么时候播 播出时间 在哪个台播 一共多少集
「璘」字组词
365bet官方

「璘」字组词

📅 08-28 ❤️ 929
10 年 2025 款最佳日历应用程序(免费和付费)
中信精彩365

10 年 2025 款最佳日历应用程序(免费和付费)

📅 11-03 ❤️ 976
变形计2017播出时间
中信精彩365

变形计2017播出时间

📅 08-28 ❤️ 853
注塑缺陷
365bet官方

注塑缺陷

📅 12-05 ❤️ 967
《国学知识》·章太炎《訄书》介绍
365bet官方

《国学知识》·章太炎《訄书》介绍

📅 01-03 ❤️ 911
为什么不让看凤凰卫视
365bet备用线路

为什么不让看凤凰卫视

📅 09-29 ❤️ 529