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

news/2024/7/21 7:39:01 标签: excel, c++

一、简介

官网: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 日首次公开发布。目前的工作重点是增强兼容性、提高性能,以及集思广益制定未来的开发目标。

二、基本用法

excel_8">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("Sheet1");
// xlnt::worksheet ws = wb.sheet(u8"中文");

// 也可以通过索引获取指定的工作表,索引从 0 开始
// xlnt::worksheet ws = wb.sheet(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 row_count = ws.rows();
// 获取列数
auto column_count = ws.columns();

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;
}

三、进阶用法

1. 设置字体

// 创建一个字体对象并设置字体大小和样式
xlnt::font font;
font.size(12); // 设置字体大小为12
font.bold(true); // 设置为粗体
font.italic(true); // 设置为斜体
font.color(xlnt::color::red()); // 设置字体颜色为红色

// 获取要设置字体的单元格
auto cell = ws.cell("A1");

// 将字体对象应用于单元格
cell.font(font);

2. 设置填充色

// 创建一个填充对象并设置颜色
xlnt::fill fill;
fill.pattern_type(xlnt::pattern_fill_type::solid);
fill.foreground(xlnt::color::green());

// 获取要设置背景色的单元格
auto cell = ws.cell("A1");

// 将填充对象应用于单元格
cell.fill(fill);

3. 设置行高与列宽

// 设置行高
ws.row_properties(1).height = 30; // 第1行高度为30像素

// 设置列宽
ws.column_properties(1).width = 20; // 第1列宽度为20

http://www.niftyadmin.cn/n/5409131.html

相关文章

ubuntu下固定USB相机设备名称

文章目录 ubuntu下固定USB相机设备名称目的解决方法 ubuntu下固定USB相机设备名称 目的 防止多个USB相机存在时&#xff0c;在不断的热插拔情况下不仅相机序号会改变&#xff0c;同时相机名称也会发生改变&#xff0c;导致无法定位打开特定相机的问题 解决方法 更改udev规则…

【Lattice FPGA 开发】IP核的调用

本文介绍Diamond开发软件进行IP核调用与对应官方文档查找方法。 文章目录 1. IP核的调用1.1 IPexpress调用IP核1.2 Clarity Designer调用IP核 2. IP核相关文档查找2.1 方法一2.2 方法二2.3 方法三 3 问题 1. IP核的调用 Diamond软件中&#xff0c;根据所选目标FPGA器件型号的…

基于Spring Boot+ Vue的房屋租赁系统

末尾获取源码作者介绍&#xff1a;大家好&#xff0c;我是墨韵&#xff0c;本人4年开发经验&#xff0c;专注定制项目开发 更多项目&#xff1a;CSDN主页YAML墨韵 学如逆水行舟&#xff0c;不进则退。学习如赶路&#xff0c;不能慢一步。 目录 一、项目简介 二、开发技术与环…

PortSwigger 基于dom的漏洞-利用 DOM 破坏来启用 XSS

进入实验随意进入一篇博客 我们可以尝试随意提交一些恶意代码看看会发生什么 很显然我们提交成功了但是我们的恶意代码貌似被过滤了 查看源码发现这里有一个过滤框架 我们打开源码分析 function loadComments(postCommentPath) {let xhr new XMLHttpRequest();xhr.onreadys…

无代理方式实现VMware的迁移?详细解析

在当今数字化时代&#xff0c;数据的安全性和可用性对于企业至关重要。尤其是在VMware转变订阅策略后&#xff0c;原本永久订阅的产品转变为以年付费订阅的形式&#xff0c;导致客户不得不支付更多的费用&#xff0c;大幅增加了成本。同时&#xff0c;客户也对VMware未来发展前…

第五篇:人工智能与机器学习技术VS创意创新(creative)--- 我为什么要翻译介绍美国人工智能科技巨头IAB公司?

【如无特殊说明&#xff0c;本文所有图片均来源于网络】 IAB平台&#xff0c;使命和功能 IAB成立于1996年&#xff0c;总部位于纽约市。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司&#xff0c;互动广告局&#xff08;IAB- the Interactive Advertising Bureau&…

爬虫实战——scrapy框架爬取多张图片

scrapy框架的基本使用&#xff0c;请参考我的另一篇文章&#xff1a;scrapy框架的基本使用 起始爬取的网页如下&#xff1a; 点击每张图片&#xff0c;可以进入图片的详情页&#xff0c;如下&#xff1a; 代码实现&#xff1a; 项目文件结构如下 img_download.py文件代码 im…

Docker的安装及MySQL的部署(CentOS版)

目录 1 前言 2 Docker安装步骤 2.1 卸载可能存在的旧版Docker 2.2 配置Docker的yum库 2.2.1 安装yum工具 2.2.2 配置Docker的yum源 2.3 安装Docker 2.4 启动和校验 2.5 配置镜像加速(使用阿里云) 2.5.1 进入控制台 2.5.2 进入容器镜像服务 2.5.3 获取指令并粘贴到…