如何用C++将数据写入Excel文件
How to write data into an Excel file in C++
我正在使用Microsoft Visual studio 2012 C++进行编程。我的教授让我把程序的结果放在excel文件中,而不是文本文件中。因为别人更容易理解。在我的C++程序中,有没有一些接口可以直接生成excel文件并将数据放入其中?
你的教授会接受csv文件吗?这是一个以字符分隔的值;通常使用逗号作为分隔符,尽管Excel也接受制表符。Excel可以自动加载这些内容,并将输入拆分为单独的行和列。我怀疑这就是教授想要的。
否则,使用Excel的组件对象模型(COM)是另一种途径。但这涉及的要多得多。
我一直在Linux中使用这个库:
https://github.com/jmcnamara/libxlsxwriter.git
它工作得很好,当然也很快。
一旦你需要文件中的多张纸,"使用csv"建议就会停止工作,就像我的情况一样。
在Windows上,您可以使用ODBC,它允许将Excel表作为常规数据库表使用。不过,它只处理数据,不处理格式、图表等。标准ODBC驱动程序只支持xls文件;若要创建xlsx文件,必须安装Microsoft Access 2010+数据库引擎Redistributable。
示例:
#include <stdio.h>
#include <tchar.h>
#include <locale.h>
#include <Windows.h>
#include <sqlext.h>
WCHAR szDSN[] = L"Driver={Microsoft Excel Driver (*.xls)};DSN='';CREATE_DB="C:\test\newfile.xls";DBQ=C:\test\newfile.xls;READONLY=0;";
BOOL ExecuteSql(HDBC hDbc, LPWSTR query){
RETCODE rc;
HSTMT hStmt;
WCHAR bufstate[10]=L"";
WCHAR buferr[1024]=L"";
SQLINTEGER i;
SQLSMALLINT cch;
BOOL result;
wprintf(L">%sn", query);
/* Prepare SQL query */
rc = SQLAllocStmt(hDbc,&hStmt);
if(!SQL_SUCCEEDED(rc)){
wprintf(L"SQLAllocStmt failedn");
return FALSE;
}
rc = SQLPrepare(hStmt, query, SQL_NTS);
if(!SQL_SUCCEEDED(rc)){
wprintf(L"SQLPrepare failedn");
SQLFreeHandle(SQL_HANDLE_STMT,hStmt);
return FALSE;
}
/* Excecute the query */
rc = SQLExecute(hStmt);
if (SQL_SUCCEEDED(rc)) {
wprintf(L"SQL Successn");
result = TRUE;
}
else{
SQLGetDiagRec(SQL_HANDLE_STMT,hStmt,1,bufstate,&i,buferr,sizeof(buferr)/sizeof(buferr[0]),&cch);
wprintf(L"SQL Error. Code: %d; Message: %sn",i,buferr);
result = FALSE;
}
SQLFreeHandle(SQL_HANDLE_STMT,hStmt);
return result;
}
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL,"Russian");
HENV hEnv;
HDBC hDbc;
/* ODBC API return status */
RETCODE rc;
int iConnStrLength2Ptr;
WCHAR szConnStrOut[256];
/* Allocate an environment handle */
rc = SQLAllocEnv(&hEnv);
/* Allocate a connection handle */
rc = SQLAllocConnect(hEnv, &hDbc);
/* Connect to the database */
rc = SQLDriverConnect(hDbc, NULL, (WCHAR*)szDSN,
SQL_NTS, (WCHAR*)szConnStrOut,
255, (SQLSMALLINT*)&iConnStrLength2Ptr, SQL_DRIVER_NOPROMPT);
if (SQL_SUCCEEDED(rc))
{
wprintf(L"Successfully connected to database. Data source name: n %sn",
szConnStrOut);
ExecuteSql(hDbc,L"CREATE TABLE [Test] ([Name] TEXT, [Surname] TEXT)");
ExecuteSql(hDbc,L"INSERT INTO [Test] VALUES ('John','Smith')");
}
else
{
wprintf(L"Couldn't connect to %s.n",szDSN);
}
/* Disconnect and free up allocated handles */
SQLDisconnect(hDbc);
SQLFreeHandle(SQL_HANDLE_DBC, hDbc);
SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
getchar();
return 0;
}
有一个名为XLSX I/O的可移植C/C++库,它可以在不安装Excel的情况下写入.XLSX文件。请参阅:https://github.com/brechtsanders/xlsxio
现代EXCEL版本可以读取多种格式,不仅仅是原生的EXCEL格式,而且其中一些版本比其他版本更容易生成。
您可以使用自动化生成本地EXCEL文件,但这很困难、繁琐且脆弱(有时会无故停止工作)。
如果你只是想填充几个单元格,最简单的方法就是写一个CSV文件。
如果希望对图纸的格式或布局进行更多控制,可以使用Excel 2003 XML格式。只需根据自己的喜好创建一个文件模板,并使用它创建自己的模板:它是简单的XML,理解起来相对简单。
我参加聚会迟到了,但我尝试了上面的一些解决方案,这似乎对我很有效。我也从其他网站获得了灵感。
第一部分是使用MS组件对象模型(COM)。参考本文-Excel C++
#import "C:Program Files (x86)Common Filesmicrosoft sharedOFFICE14mso.dll"
rename_namespace("Office2003")
rename("RGB","RGBmso")
rename("DocumentProperties","DocumentPropertiesmso")
#import "C:Program Files (x86)Common FilesMicrosoft SharedVBAVBA6VBE6EXT.olb"
rename_namespace("VBE6")
#pragma warning (disable:4278)
#import "C:Program Files (x86)Microsoft OfficeOffice14EXCEL.EXE"
exclude("IFont", "IPicture")
rename("RGB","RGBxl")
rename("DialogBox", "DlgBoxxl")
接下来为Excel::_ApplicationPtr、Excel::_WorkbookPtr和Excel::_WorksheetPtr 创建Excel指针
使用AfxInitExtensionModule()初始化dll
创建指向Excel范围的指针-Excel::RangePtr。这是用于在单元格级别访问数据的内容。
向客户端代码公开API以进行读写。这是一个很好的指南https://github.com/jmcnamara/libxlsxwriterC资产负债表
对于性能POV,我能够在155秒内写入约33k条记录。
如果您不想使用第三方库或自动化,并且需要某种格式(颜色、字体等),您可以简单地创建一个开放的office xml。http://en.wikipedia.org/wiki/Microsoft_Office_2003_XML_formats
- 如何从excel文件中读取数据并存储到变量中?
- 错误写入Excel文件-C++
- C++使用 adodb 在 64 位 Windows 7 中读取 Excel 文件?
- 在C J2ME中读取Excel文件,并从ITQ获取数据
- 使用C 在Excel文件中阅读的建议
- 打开现有的 Excel 文件 libxl
- 使用 MFC 时导出到 Excel 文件
- C 如何通过同一MFC应用程序通过System Command打开Excel文件后关闭CMD EXE
- 使用visualstudio在c++中读取excel文件
- 如何用C++将数据写入Excel文件
- 用c++读取excel文件(通用方向)
- 如何在 C++ 上使用互操作创建 Excel 文件
- 如何创建-编辑-删除 excel 文件
- 在C C++中比较和匹配单词/excel文件中的数字
- C#程序,用于使用关闭前事件处理程序自动处理excel,而不保存编辑后的excel文件
- 用c++读写excel文件
- 使用OleContainer保存时损坏的Excel文件
- 在Windows应用程序中从rdl/rdlc文件中写入Excel文件
- 在mac上使用system()打开excel文件
- Libxl从excel文件中读取整数