C++操作Excel表格

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

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

读xlsx文件并存入vector内

#include 
#include 
#include
#include
#include

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

	// 会把当前占用的单元格全都打印出来,空单元格则为空格。
	for (auto row : ws.rows(false)){
		std::vectortmp{};
		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 
#include 

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 
#include 
#include 
#include 

int main(){
	std::vector< std::vector > wholeWorksheet;
	for (int outer = 0; outer < 10; outer++){
		std::vector 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,那么不管再设置什么格式都是无效的,都只是文本格式

你可能感兴趣的:(c++,开发语言)