当前位置: 首页 > news >正文

C++读写Excel(xlnt库的使用)

一、简介

官网:https://github.com/tfussell/xlnt
Cross-platform user-friendly xlsx library for C++11+

xlnt is a modern C++ library for manipulating spreadsheets in memory and reading/writing them from/to XLSX files as described in ECMA 376 4th edition. The first public release of xlnt version 1.0 was on May 10th, 2017. Current work is focused on increasing compatibility, improving performance, and brainstorming future development goals. For a high-level summary of what you can do with this library, see the feature list. Contributions are welcome in the form of pull requests or discussions on the repository’s Issues page.

xlnt 是一个现代 C++ 库,用于在内存中操作电子表格,并按照 ECMA 376 第 4 版中的描述,从 XLSX 文件中读取/写入电子表格。xlnt 1.0 版本于 2017 年 5 月 10 日首次公开发布。目前的工作重点是增强兼容性、提高性能,以及集思广益制定未来的开发目标。

二、基本用法

1. 生成excel

#include <xlnt/xlnt.hpp>int main()
{xlnt::workbook wb;xlnt::worksheet ws = wb.active_sheet();ws.cell("A1").value(5);ws.cell("B2").value("string data");ws.cell("C3").formula("=RAND()");ws.merge_cells("C3:C4");ws.freeze_panes("B2");wb.save("example.xlsx");return 0;
}

2. 读取指定表单

xlnt::workbook wb;
wb.load("example.xlsx"); // 加载 Excel 文件// 通过名称获取指定的工作表
xlnt::worksheet ws = wb.sheet_by_title("Sheet1");
// xlnt::worksheet ws = wb.sheet_by_title(u8"中文");// 也可以通过索引获取指定的工作表,索引从 0 开始
// xlnt::worksheet ws = wb.sheet_by_index(0);
// xlnt::worksheet ws = wb.sheet_by_id(0);std::cout << "正在读取工作表: " << ws.title() << std::endl;

3. 读取指定单元格

// 读取 A1 单元格的值
auto cell_value = ws.cell("A1").value();
auto cell_value = ws.cell(xlnt::cell_reference(1, 1)).value();
auto cell_value = ws.cell(1, 1).value();

4. 获取行数或列数

// 获取所有行
auto rows = ws.rows();
// 计算行数
std::size_t row_count = std::distance(rows.begin(), rows.end());// 获取所有列
auto columns = ws.columns();
// 计算行数
std::size_t row_count = std::distance(columns.begin(), columns.end());

5. 读取指定范围

#include <xlnt/xlnt.hpp>
#include <iostream>
#include <vector>int main() {xlnt::workbook wb;wb.load("example.xlsx"); // 加载 Excel 文件auto ws = wb.active_sheet();std::vector<std::string> row_data;// 读取第1行的数据for (const auto& cell : ws.range("1:1")) {row_data.push_back(cell.to_string());}// 打印第1行的数据for (const auto& data : row_data) {std::cout << data << " ";}return 0;
}

6. 设置属性

// 设置表单名称
ws.title("test");// 设置单元格文本的属性
ws.cell("A1").font(xlnt::font().color(xlnt::color::red()));
ws.cell("A1").font(xlnt::font().name("SimSun"));
ws.cell("A1").font(xlnt::font().bold(true));
ws.cell("A1").font(xlnt::font().size(13));// 同时设置单元格的多个属性
ws.cell("A1").font(xlnt::font().color(xlnt::color::green()).name("SimSun").bold(true).size(20));// 设置单元格的背景颜色为绿色
ws.cell("A1").fill(xlnt::fill::solid(xlnt::color::green()));
ws.cell("A2").fill(xlnt::fill::solid(xlnt::rgb_color(0, 255, 0)));// 设置行高(1.5发布版不可用)
ws.row_properties(1).height = 30; // 第1行高度为30 
// 设置列宽
ws.column_properties(1).width = 20; // 第1列宽度为20// 合并C3:C4单元格
ws.merge_cells("C3:C4");

三、进阶用法

1. xlsx表格与xlnt库对象关系

xlsx对象xlnt对象说明
表格文件xlnt::workbook
表单xlnt::worksheet表单的标题在最下面
行rowrow_t从1开始
列columncolumn_t从A开始
单元cellxlnt::cell包含内容和字体等属性

https://www.cpp-prog.com/编程/xlnt/

相关文章:

  • 用一个 Python 脚本实现依次运行其他多个带 argparse 命令行参数的 .py 文件
  • CTP-API开发系列之三:柜台系统简介
  • RAG综述 《Retrieval-Augmented Generation for Large Language Models: A Survey》笔记
  • jupyter notebook 调整深色背景与单元格宽度与自动换行
  • 权限管理系统-0.2.0
  • 前端vite+vue3——可视化页面性能耗时指标(fmp、fp)
  • 蓝桥杯(3.10)
  • WPF 窗口添加投影效果Effect
  • 数据结构之八大排序
  • 数学建模-动态规划(美赛运用)
  • docker本地搭建spark yarn hive环境
  • Springboot+vue的医院药品管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。
  • 借助 Terraform 功能协调部署 CI/CD 流水线-Part 1
  • 互操作性元模型框架MFI
  • idea2023版使用废弃类没有删除线处理方法
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Angular 响应式表单之下拉框
  • Apache Pulsar 2.1 重磅发布
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • spark本地环境的搭建到运行第一个spark程序
  • Vue全家桶实现一个Web App
  • Vue小说阅读器(仿追书神器)
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 基于 Babel 的 npm 包最小化设置
  • 浅谈web中前端模板引擎的使用
  • 深入浅出webpack学习(1)--核心概念
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • kubernetes资源对象--ingress
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • (1)(1.13) SiK无线电高级配置(五)
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (C语言)球球大作战
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (数据结构)顺序表的定义
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转)负载均衡,回话保持,cookie
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .apk文件,IIS不支持下载解决
  • .gitignore文件—git忽略文件
  • .net 8 发布了,试下微软最近强推的MAUI
  • .NET Framework 4.6.2改进了WPF和安全性
  • .net web项目 调用webService
  • .net 受管制代码
  • .NET学习教程二——.net基础定义+VS常用设置
  • [ C++ ] STL priority_queue(优先级队列)使用及其底层模拟实现,容器适配器,deque(双端队列)原理了解
  • [ARM]ldr 和 adr 伪指令的区别