C语言 WIN32 ole2 读取 Excel表格顺序使用实例
时间: 2024-01-30 17:04:31 浏览: 198
以下是一个简单的使用 C语言 WIN32 ole2 读取 Excel表格顺序的实例:
```c
#include <windows.h>
#include <ole2.h>
#include <stdio.h>
int main()
{
HRESULT hr;
LPDISPATCH pXL = NULL;
LPDISPATCH pBooks = NULL;
LPDISPATCH pBook = NULL;
LPDISPATCH pSheets = NULL;
LPDISPATCH pSheet = NULL;
VARIANT vResult;
VARIANT vFilename;
VARIANT vUpdateLinks;
// 初始化 COM
CoInitialize(NULL);
// 创建 Excel 应用程序对象
hr = CoCreateInstance(CLSID_Application, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void **)&pXL);
if(FAILED(hr))
{
printf("CoCreateInstance failed\n");
return hr;
}
// 设置是否显示 Excel 窗口
pXL->lpVtbl->put_Visible(pXL, VARIANT_FALSE);
// 打开 Excel 文件
VariantInit(&vFilename);
vFilename.vt = VT_BSTR;
vFilename.bstrVal = SysAllocString(L"C:\\test.xls");
VariantInit(&vUpdateLinks);
vUpdateLinks.vt = VT_BOOL;
vUpdateLinks.boolVal = VARIANT_FALSE;
pBooks = pXL->lpVtbl->Workbooks(pXL);
pBook = pBooks->lpVtbl->Open(pBooks, vFilename, 0, VARIANT_FALSE, NULL, NULL, NULL, NULL, NULL, NULL, vUpdateLinks, NULL, NULL, NULL);
SysFreeString(vFilename.bstrVal);
// 获取所有工作表
pSheets = pBook->lpVtbl->Worksheets(pBook);
// 获取工作表数量
VariantInit(&vResult);
vResult.vt = VT_I4;
vResult.lVal = 0;
pSheets->lpVtbl->get_Count(pSheets, &vResult);
// 逐个读取工作表
for(int i = 1; i <= vResult.lVal; i++)
{
// 获取指定工作表
VariantInit(&vResult);
vResult.vt = VT_I4;
vResult.lVal = i;
pSheet = pSheets->lpVtbl->Item(pSheets, vResult);
// 获取工作表名称
VariantInit(&vResult);
pSheet->lpVtbl->get_Name(pSheet, &vResult);
// 打印工作表名称
printf("Sheet %d: %S\n", i, vResult.bstrVal);
// 释放 Variant 对象
VariantClear(&vResult);
// 释放工作表对象
pSheet->lpVtbl->Release(pSheet);
}
// 释放工作表集合对象
pSheets->lpVtbl->Release(pSheets);
// 关闭 Excel 文件
pBook->lpVtbl->Close(pBook, VARIANT_TRUE, NULL, NULL);
pBooks->lpVtbl->Release(pBooks);
// 释放 Excel 应用程序对象
pXL->lpVtbl->Quit(pXL);
pXL->lpVtbl->Release(pXL);
// 反初始化 COM
CoUninitialize();
return 0;
}
```
这个实例演示了如何使用 C语言 WIN32 ole2 读取 Excel表格顺序。它使用了 Microsoft Office 的 COM 接口来操作 Excel 文件,通过逐个读取工作表并打印工作表名称来展示了如何遍历 Excel 文件中的工作表。
阅读全文