使用xInt开源库生成Excel文档xlsx

参考一下xlnt自带的例程xlnt.test.sln,用VS2015打开后,拷贝里面的代码,复制到自己的工程当中。记得导入相应的动态链接库。

 

//在stdafx.h当中添加两行代码:
#include <xlnt/xlnt.hpp>
#pragma comment (lib,"xlntd.lib")




//然后在自己的主程序里面添加函数test1()

#include <math.h>

void CMyDlialog::test1()
{
	::DeleteFileA("mytest.xlsx");
	int nt = GetTickCount();
	xlnt::workbook *pwb = new xlnt::workbook();
	xlnt::worksheet ws = pwb->active_sheet();
	int nna = 100;
	int ncnt, i;
	double dbs;
	ncnt = 200000;
	char ssss[30],va[30];
	//xlnt::fill fill(xlnt::pattern_fill()
	//	.type(xlnt::pattern_fill_type::solid)
	//	.foreground(xlnt::color::red()));//填充单元格
	xlnt::font font1;//字体与颜色的设置
	xlnt::font font2;
	font1.color(xlnt::rgb_color(0, 0, 0));
	font1.name("Times New Roman");
	font1.size(12);
	font1.bold(1);
	font2 = font1;
	font2.color(xlnt::rgb_color(255, 0, 0));
	for (i = 0; i < ncnt; i++)
	{
		ZeroMemory(ssss,30);
		ZeroMemory(va, 30);
		sprintf_s(ssss, 30, "A%d", i + 1);
		dbs = (rand() % 1000)*0.65 + rand() % 20 - 166;
		sprintf_s(va, 30, "%.3lf", dbs);

		//if (dbs>300)
		//	ws.cell(ssss).fill(fill);//填充单元格颜色
		if (dbs>300)
			ws.cell(ssss).font(font2);
		else
			ws.cell(ssss).font(font1);
		ws.cell(ssss).value(dbs);//输出数值
		//ws.cell(ssss).value(va);//输出文本
		if ((i + 1) % 4000==0)
			TRACE1("write already %d lines\n",i+1);
	}

	ws.clear_row(1);
	ZeroMemory(ssss, 30);
	sprintf_s(ssss, 30, "mytest.xlsx");//格式化输出文件名
	pwb->save(ssss);
	pwb->remove_sheet(ws);
	delete pwb;

	TRACE1("used %dms\n",GetTickCount()-nt);
}

再调用下test1()即可生成xlsx文件。20W行写入与生成压缩包xlsx差不多30秒时间开销。

主要的问题是:编译器会提示有内存泄露,可以不用管它。xlsx生成完毕,保存退出后内存就会释放的。

类库里面的std::string没有格式化输出函数,因此这里通过char格式化输出,这样在VS平台使用会很方便。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值