C语言 借助于Microsoft Office Excel自带的COM组件 写入Excel表格数据
时间: 2024-02-13 07:01:37 浏览: 152
在C语言中,可以通过借助于 Microsoft Office Excel 自带的 COM 组件来写入 Excel 表格数据。下面是一个简单的示例,演示了如何使用 COM 组件在 Excel 中写入数据:
```c
#include <Windows.h>
#include <Ole2.h>
#include <OleAuto.h>
int main()
{
// 初始化 COM 库
CoInitialize(NULL);
// 创建 Excel 应用程序对象
IDispatch* pExcelApp;
CoCreateInstance(&CLSID_Application, NULL, CLSCTX_LOCAL_SERVER, &IID_IDispatch, (void**)&pExcelApp);
// 打开 Excel 文件
VARIANT vFilename;
VariantInit(&vFilename);
vFilename.vt = VT_BSTR;
vFilename.bstrVal = SysAllocString(L"C:\\test.xlsx");
IDispatch* pWorkbook;
IDispatch* pWorksheet;
VARIANT vIndex;
VariantInit(&vIndex);
vIndex.vt = VT_I4;
vIndex.lVal = 1;
DISPATCH_METHOD(pExcelApp, "Workbooks", &pWorkbook);
DISPATCH_METHOD(pWorkbook, "Open", &pWorksheet, 1, &vFilename);
DISPATCH_METHOD(pWorksheet, "Activate", NULL);
// 写入数据
VARIANT vCell;
VariantInit(&vCell);
vCell.vt = VT_BSTR;
vCell.bstrVal = SysAllocString(L"A1");
VARIANT vData;
VariantInit(&vData);
vData.vt = VT_BSTR;
vData.bstrVal = SysAllocString(L"Hello, world!");
DISPATCH_METHOD(pWorksheet, "Range", &pRange, 1, &vCell);
DISPATCH_PROPERTYPUT(pRange, "Value", 0, &vData);
// 保存并关闭 Excel 文件
DISPATCH_METHOD(pWorkbook, "Save", NULL);
DISPATCH_METHOD(pWorkbook, "Close", NULL);
// 释放资源
pWorksheet->Release();
pWorkbook->Release();
pExcelApp->Release();
SysFreeString(vFilename.bstrVal);
SysFreeString(vCell.bstrVal);
SysFreeString(vData.bstrVal);
CoUninitialize();
return 0;
}
```
在上述示例中,我们首先初始化了 COM 库,然后创建了一个 Excel 应用程序对象,使用它来打开指定的 Excel 文件。接着,我们使用 COM 组件将字符串 "Hello, world!" 写入单元格 A1 中,最后保存并关闭 Excel 文件,并释放所有资源。
需要注意的是,在使用 DISPATCH_PROPERTYPUT 宏时,需要先创建一个 VARIANT 结构体来存储要写入的数据。例如,如果要将字符串 "Hello, world!" 写入单元格中,可以这样创建 VARIANT 结构体:
```c
VARIANT vData;
VariantInit(&vData);
vData.vt = VT_BSTR;
vData.bstrVal = SysAllocString(L"Hello, world!");
```
在写入数据之后,还需要使用 DISPATCH_METHOD 宏保存并关闭 Excel 文件:
```c
// 保存并关闭 Excel 文件
DISPATCH_METHOD(pWorkbook, "Save", NULL);
DISPATCH_METHOD(pWorkbook, "Close", NULL);
```
最后,记得在程序结束时释放所有资源:
```c
pWorksheet->Release();
pWorkbook->Release();
pExcelApp->Release();
SysFreeString(vFilename.bstrVal);
SysFreeString(vCell.bstrVal);
SysFreeString(vData.bstrVal);
CoUninitialize();
```
这段代码释放了所有对象,释放字符串的内存,最后调用 CoUninitialize() 函数释放 COM 库。
阅读全文