C语言 DISPID_WORKBOOKS_OPEN 打开excel表格实例源码
时间: 2023-07-31 16:05:26 浏览: 61
以下是使用 C 语言调用 Excel COM 接口打开 Excel 表格的示例代码:
```c
#include <stdio.h>
#include <windows.h>
#include <ole2.h>
int main(int argc, char* argv[])
{
// 初始化 COM 库
CoInitialize(NULL);
// 声明变量
IDispatch* pExcelApp = NULL;
VARIANT vtWorkbooks, vtWorkbook;
DISPID dispid;
// 创建 Excel 应用程序对象
CLSID clsid;
HRESULT hr = CLSIDFromProgID(L"Excel.Application", &clsid);
hr = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void**)&pExcelApp);
// 获取 Workbooks 属性的 DISPID
OLECHAR* strWorkbooks = L"Workbooks";
hr = pExcelApp->GetIDsOfNames(IID_NULL, &strWorkbooks, 1, LOCALE_USER_DEFAULT, &dispid);
// 获取 Workbooks 对象
VariantInit(&vtWorkbooks);
DISPPARAMS dp = { 0 };
hr = pExcelApp->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, &dp, &vtWorkbooks, NULL, NULL);
// 获取 Open 方法的 DISPID
OLECHAR* strOpen = L"Open";
hr = vtWorkbooks.pdispVal->GetIDsOfNames(IID_NULL, &strOpen, 1, LOCALE_USER_DEFAULT, &dispid);
// 设置文件名参数
VARIANTARG varg;
VariantInit(&varg);
varg.vt = VT_BSTR;
varg.bstrVal = SysAllocString(L"C:\\test.xlsx");
// 调用 Open 方法打开文件
VariantInit(&vtWorkbook);
dp.cArgs = 1;
dp.rgvarg = &varg;
hr = vtWorkbooks.pdispVal->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &dp, &vtWorkbook, NULL, NULL);
// 释放资源
VariantClear(&varg);
VariantClear(&vtWorkbook);
VariantClear(&vtWorkbooks);
pExcelApp->Release();
// 反初始化 COM 库
CoUninitialize();
return 0;
}
```
注意:在调用 COM 接口前需要先调用 CoInitialize 函数进行 COM 库的初始化,在使用完后需要调用 CoUninitialize 函数进行反初始化。此外,打开 Excel 表格需要指定文件名,本例中文件名为 C:\\test.xlsx,可以根据实际情况进行修改。