我们这里使用开源的第三方库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,那么不管再设置什么格式都是无效的,都只是文本格式