C++操作Excel表格

我们这里使用开源的第三方库xlnt,环境是Windows,IDE是visual studio

环境配置就不再介绍了,我们这里是使用vcpkg直接的,你们可以也去GitHub下载自己编译

读xlsx文件并存入vector内

#include <iostream>
#include <xlnt/xlnt.hpp>
#include<vector>
#include<vector>
#include<string>

int main(){
	std::vector<std::vector<std::string>>value{};
	xlnt::workbook wb;//创建一个工作簿对象
	wb.load("test.xlsx");
	auto ws = wb.active_sheet();//返回工作表对象

	// 会把当前占用的单元格全都打印出来,空单元格则为空格。
	for (auto row : ws.rows(false)){
		std::vector<std::string>tmp{};
		for (auto cell : row) {
			tmp.emplace_back(cell.to_string());
			std::clog << cell.to_string() << "\t";
		}
		value.emplace_back(tmp);
		std::clog << std::endl;
	}
	std::cout << "---------------------------------------------\n";
	for (auto i : value) {
		for (auto j : i) {
			std::cout << j << '\t';
		}
		std::endl(std::cout);
	}
}

创建xlsx写,设置单元格格式

#include <iostream>
#include <xlnt/xlnt.hpp>

int main()
{
	xlnt::workbook wb;
	xlnt::worksheet ws = wb.active_sheet();

	//设置工作表名称
	ws.title("data");
	//赋值为数值
	ws.cell("A1").value(0.5);
	//设置单位格格式,设为百分比形式
	ws.cell("A1").number_format(xlnt::number_format::percentage());
	//赋值为字符串
	ws.cell("B2").value("string data");
	//赋值为公式
	ws.cell("C3").formula("=RAND()");
	//合并单元格
	ws.merge_cells("C3:C4");
	//冻结窗格
	ws.freeze_panes("B2");
	//保存
	wb.save("test_save.xlsx");
}

批量写入xlsx

#include <iostream>
#include <xlnt/xlnt.hpp>
#include <vector>
#include <string>

int main(){
	std::vector< std::vector<std::string> > wholeWorksheet;
	for (int outer = 0; outer < 10; outer++){
		std::vector<std::string> singleRow;
		for (int inner = 0; inner < 10; inner++){
			//给vector中的每个元素赋值
			singleRow.emplace_back(std::to_string(inner + 1));
		}
		wholeWorksheet.emplace_back(singleRow);
	}
	//创建工作簿
	xlnt::workbook wbOut;

	//创建工作表,并把vector中的元素写入表格
	xlnt::worksheet wsOut = wbOut.active_sheet();
	//给工作表设置名称
	wsOut.title("data");
	for (int fOut = 0; fOut < wholeWorksheet.size(); fOut++){
		for (int fIn = 0; fIn < wholeWorksheet.at(fOut).size(); fIn++){
			std::string cell = xlnt::cell_reference(fIn + 1, fOut + 1).to_string();
			// 给单元格赋值。特别注意:工作表中的单元格下标是从1开始,而vector中的元素下标是从0开始
			wsOut.cell(cell).value(std::stoi(wholeWorksheet[fOut][fIn]));
			//将单元格格式设置为数字.00格式
			wsOut.cell(cell).number_format(xlnt::number_format::number_00());
		}
	}
	wbOut.save("test_save.xlsx");
}

需要注意,如果设置单元格value的时候使用的是string,那么不管再设置什么格式都是无效的,都只是文本格式

  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值