绝对路径保存为excel c++代码
时间: 2024-02-04 11:43:20 浏览: 20
以下是一个简单的C++程序,可以将数据保存到Excel文件中。该程序使用了COM接口,需要安装Microsoft Excel软件。
```c++
#include <iostream>
#include <windows.h>
#include <ole2.h>
#include <olectl.h>
#include <ocidl.h>
using namespace std;
int main() {
// 初始化COM接口
CoInitialize(NULL);
// 创建Excel应用程序对象
IDispatch* pExcelApp = NULL;
CLSID clsid;
wchar_t szProgID[] = L"Excel.Application";
CLSIDFromProgID(szProgID, &clsid);
CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void**)&pExcelApp);
// 创建工作簿对象
IDispatch* pWorkbook = NULL;
{
VARIANT v;
VariantInit(&v);
v.vt = VT_DISPATCH;
v.pdispVal = pExcelApp;
DISPID dispid;
OLECHAR* szMember = L"Workbooks";
pExcelApp->GetIDsOfNames(IID_NULL, &szMember, 1, LOCALE_USER_DEFAULT, &dispid);
pExcelApp->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, &v, NULL, NULL, NULL);
pWorkbook = v.pdispVal;
}
// 打开工作簿文件
IDispatch* pWorksheet = NULL;
{
VARIANT v;
VariantInit(&v);
v.vt = VT_BSTR;
v.bstrVal = SysAllocString(L"C:\\data.xlsx"); // 文件路径
DISPID dispid;
OLECHAR* szMember = L"Open";
pWorkbook->GetIDsOfNames(IID_NULL, &szMember, 1, LOCALE_USER_DEFAULT, &dispid);
pWorkbook->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &v, NULL, NULL, NULL);
VariantClear(&v);
// 获取活动工作表
{
VARIANT v;
VariantInit(&v);
DISPID dispid;
OLECHAR* szMember = L"ActiveSheet";
pExcelApp->GetIDsOfNames(IID_NULL, &szMember, 1, LOCALE_USER_DEFAULT, &dispid);
pExcelApp->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, &v, NULL, NULL, NULL);
pWorksheet = v.pdispVal;
}
}
// 写入数据
{
const int rows = 3;
const int cols = 2;
VARIANT v;
VariantInit(&v);
v.vt = VT_ARRAY | VT_VARIANT;
SAFEARRAYBOUND sab[2];
sab[0].lLbound = 1;
sab[0].cElements = rows;
sab[1].lLbound = 1;
sab[1].cElements = cols;
v.parray = SafeArrayCreate(VT_VARIANT, 2, sab);
VARIANT* pData = NULL;
SafeArrayAccessData(v.parray, (LPVOID*)&pData);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
pData[i*cols+j].vt = VT_I4;
pData[i*cols+j].lVal = i*cols+j;
}
}
SafeArrayUnaccessData(v.parray);
DISPID dispid;
OLECHAR* szMember = L"Range";
pWorksheet->GetIDsOfNames(IID_NULL, &szMember, 1, LOCALE_USER_DEFAULT, &dispid);
VARIANTARG args[2];
args[1].vt = VT_BSTR;
args[1].bstrVal = SysAllocString(L"A1:B3"); // 写入范围
args[0].vt = VT_ARRAY | VT_VARIANT;
args[0].parray = v.parray;
pWorksheet->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, args, NULL, NULL, NULL);
}
// 保存并关闭工作簿
{
VARIANT v;
VariantInit(&v);
v.vt = VT_BOOL;
v.boolVal = true;
DISPID dispid;
OLECHAR* szMember = L"Save";
pWorkbook->GetIDsOfNames(IID_NULL, &szMember, 1, LOCALE_USER_DEFAULT, &dispid);
pWorkbook->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &v, NULL, NULL, NULL);
VariantClear(&v);
szMember = L"Close";
pWorkbook->GetIDsOfNames(IID_NULL, &szMember, 1, LOCALE_USER_DEFAULT, &dispid);
pWorkbook->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, NULL, NULL, NULL, NULL);
}
// 退出Excel应用程序
{
VARIANT v;
VariantInit(&v);
DISPID dispid;
OLECHAR* szMember = L"Quit";
pExcelApp->GetIDsOfNames(IID_NULL, &szMember, 1, LOCALE_USER_DEFAULT, &dispid);
pExcelApp->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &v, NULL, NULL, NULL);
VariantClear(&v);
}
// 释放COM接口
pWorksheet->Release();
pWorkbook->Release();
pExcelApp->Release();
CoUninitialize();
return 0;
}
```
这个程序将数据写入Excel文件的A1:B3单元格中,保存并关闭工作簿。你可以根据自己的需求修改其中的参数。