【C++】开源:跨平台Excel处理库-libxlsxwriter配置使用

😏★,°:.☆( ̄▽ ̄)/$:.°★ 😏
这篇文章主要介绍Excel处理库-libxlsxwriter配置使用。
无专精则不能成,无涉猎则不能通。——梁启超
欢迎来到我的博客,一起学习,共同进步。
喜欢的朋友可以关注一下,下次更新不迷路🥞

文章目录

    • :smirk:1. 项目介绍
    • :blush:2. 环境配置
    • :satisfied:3. 使用说明

😏1. 项目介绍

项目Github地址:https://github.com/jmcnamara/libxlsxwriter

Wiki地址:https://libxlsxwriter.github.io/

libxlsxwriter 是一个用于创建 Microsoft Excel XLSX 文件的C库。它提供了一系列功能,可以让您通过编程方式生成包含单元格、图表、格式化等内容的 Excel 文件。下面是 libxlsxwriter 的一些特点和功能:

1.跨平台性:libxlsxwriter 可以在多个操作系统上工作,包括 Linux、macOS 和 Windows。

2.创建 XLSX 文档:它允许您创建 XLSX 格式的 Excel 文档,支持 Excel 2007 及更高版本。

3.丰富的功能:libxlsxwriter 支持创建工作表、单元格、公式、图表、条件格式化、数据筛选等功能。

4.高性能:该库被设计为具有高性能,在大型数据集的情况下生成速度快。

5.支持多种格式和样式:您可以设置单元格的格式、字体、颜色、边框、背景等属性,以及应用数值格式、日期格式、公式和函数等。

6.支持图表:libxlsxwriter 允许您创建各种 Excel 图表,如条形图、饼图、折线图等,并支持自定义图表的样式和属性。

但是要注意,libxlsxwriter 只能用于创建 XLSX 文件,不支持读取或修改现有的 Excel 文件。(可以通过c++自带的文件处理来读取,处理后的数据再手动导入到最后的表中)

😊2. 环境配置

下面进行环境配置:

# 安装依赖
sudo apt-get install libxslt-dev
# 下载源码
git clone https://github.com/jmcnamara/libxlsxwriter
# 编译
cd libxlsxwriter
make
sudo cp lib/libxlsxwriter.so.5 /usr/lib/libxlsxwriter.so.5
cd cmake
cmake ..
make 
sudo make install

编译运行:

g++ -o main main.cpp -lxlsxwriter && ./main

😆3. 使用说明

下面进行使用分析:

创建excel并写入示例:

#include "xlsxwriter.h"int main() {/* Create a new workbook and add a worksheet. */lxw_workbook  *workbook  = workbook_new("demo.xlsx");lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);/* Add a format. */lxw_format *format = workbook_add_format(workbook);/* Set the bold property for the format */format_set_bold(format);/* Change the column width for clarity. */worksheet_set_column(worksheet, 0, 0, 20, NULL);/* Write some simple text. */worksheet_write_string(worksheet, 0, 0, "Hello", NULL);/* Text with formatting. */worksheet_write_string(worksheet, 1, 0, "World", format);/* Write some numbers. */worksheet_write_number(worksheet, 2, 0, 123,     NULL);worksheet_write_number(worksheet, 3, 0, 123.456, NULL);/* Insert an image. */worksheet_insert_image(worksheet, 1, 2, "logo.png");workbook_close(workbook);return 0;
}

参考某博主,生成指定个数的uuid示例:

#include <chrono>
#include <condition_variable>
#include <ctime>
#include <curl/curl.h>
#include <curl/easy.h>
#include <fstream>
#include <functional>
#include <future>
#include <iostream>
#include <iomanip>
#include <map>
#include <memory>
#include <mutex>
#include <random>
#include <stdio.h>
#include <string>
#include <uuid/uuid.h>
#include <vector>
#include "xlsxwriter.h"// ref: https://www.cnblogs.com/Fred1987/p/17442487.html
// 编译: g++ -o main main.cpp -lxlsxwriter -luuid -lpthread && ./mainstd::string get_time_now(bool is_exact = false)
{std::chrono::time_point<std::chrono::high_resolution_clock> now = std::chrono::high_resolution_clock::now();time_t raw_time = std::chrono::high_resolution_clock::to_time_t(now);struct tm tm_info = *localtime(&raw_time);std::stringstream ss;ss << std::put_time(&tm_info, "%Y%m%d%H%M%S");if (is_exact){std::chrono::seconds seconds = std::chrono::duration_cast<std::chrono::seconds>(now.time_since_epoch());std::chrono::milliseconds mills = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch());std::chrono::microseconds micros = std::chrono::duration_cast<std::chrono::microseconds>(now.time_since_epoch());std::chrono::nanoseconds nanos = std::chrono::duration_cast<std::chrono::nanoseconds>(now.time_since_epoch());std::uint64_t mills_count = mills.count() - seconds.count() * 1000;std::uint64_t micros_count = micros.count() - mills.count() * 1000;std::uint64_t nanos_count = nanos.count() - micros.count() * 1000;ss << "_" << std::setw(3) << std::setfill('0') << std::to_string(mills_count)<< std::setw(3) << std::setfill('0') << std::to_string(micros_count)<< std::setw(3) << std::setfill('0') << std::to_string(nanos_count);}return ss.str();
}// generate uuid
char *uuid_value = (char *)malloc(40);
char *get_uuid_value()
{uuid_t new_uuid;uuid_generate(new_uuid);uuid_unparse(new_uuid, uuid_value);return uuid_value;
}void xlsxwriter_excel(const int &len)
{lxw_workbook *workbook = workbook_new("uuid.xlsx");lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);worksheet_set_column(worksheet,0,0,50,NULL); // 设置列宽// write headerworksheet_write_string(worksheet, 0, 0, "Header", NULL);worksheet_write_string(worksheet, 0, 1, "Number", NULL);for (int row = 1; row <= len; row++){worksheet_write_string(worksheet, row, 0, get_uuid_value(), NULL);worksheet_write_number(worksheet, row, 1, row, NULL);}workbook_close(workbook);std::cout << get_time_now(true) << ",finish in " << __FUNCTION__ << std::endl;
}int main(int agrs,char **argv)
{xlsxwriter_excel(atoi(argv[1])); // 读取命令行,生成几个uuidreturn 0;
}

结合CGAL计算几何库对txt点集进行处理,并处理后的数据写入xlsx,示例:

#include <iostream>
#include <fstream>
#include <vector>
#include "xlsxwriter.h"
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Alpha_shape_2.h>typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef K::Point_2 Point_2;// 编译: g++ -o main main.cpp -lxlsxwriter -lCGAL -lgmp && ./mainint main() {// 1. 从文本文件中读取 XY 点集std::ifstream inputFile("input.txt");if (!inputFile) {std::cout << "Failed to open input file." << std::endl;return 1;}std::vector<Point_2> points;double x, y;while (inputFile >> x >> y) {points.push_back(Point_2(x, y));}inputFile.close();// ...// 2. 将处理后的点集写入 xlsx 文件中lxw_workbook* workbook = workbook_new("output.xlsx");lxw_worksheet* worksheet = workbook_add_worksheet(workbook, NULL);int row = 0;for (const Point_2& point : points) {int col = 0;worksheet_write_number(worksheet, row, col++, CGAL::to_double(point.x()), NULL);worksheet_write_number(worksheet, row, col, CGAL::to_double(point.y()), NULL);row++;}workbook_close(workbook);std::cout << "Output file has been generated." << std::endl;return 0;
}

在这里插入图片描述

以上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/73783.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nginx php-fpm安装配置

nginx php-fpm安装配置 nginx本身不能处理PHP&#xff0c;它只是个web服务器&#xff0c;当接收到请求后&#xff0c;如果是php请求&#xff0c;则发给php解释器处理&#xff0c;并把结果返回给客户端。 nginx一般是把请求发fastcgi管理进程处理&#xff0c;fascgi管理进程选…

「UG/NX」Block UI 超级截面SuperSection

✨博客主页何曾参静谧的博客📌文章专栏「UG/NX」BlockUI集合📚全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C+&#

【学习日记】【FreeRTOS】延时列表的实现

前言 本文在前面文章的基础上实现了延时列表&#xff0c;取消了 TCB 中的延时参数。 本文是对野火 RTOS 教程的笔记&#xff0c;融入了笔者的理解&#xff0c;代码大部分来自野火。 一、如何更高效地查找延时到期的任务 1. 朴素方式 在本文之前&#xff0c;我们使用了一种朴…

Databend 开源周报第 106 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 数据脱敏 Data…

iPhone 15受益:骁龙8 Gen 3可能缺席部分安卓旗舰机

明年一批领先的安卓手机的性能可能与今年的机型非常相似。硅成本的上涨可能是原因。 你可以想象&#xff0c;2024年许多最好的手机都会在Snapdragon 8 Gen 3上运行&#xff0c;这是高通公司针对移动设备的顶级芯片系统的更新&#xff0c;尚未宣布。然而&#xff0c;来自中国的…

Docker基础概述

目录 ​编辑 一、Docker简介 二、 Docker与虚拟机的区别 1.1namespace的六项隔离 二、Docker核心概念 2.1镜像 2.2容器 2.3仓库 三、安装Docker 3.1查看 docker 版本信息 四、Docker 镜像操作 4.1搜索镜像 4.2获取镜像 4.3镜像加速下载 4.4查看镜像信息 4.5根据…

Redis五大基本数据类型及其使用场景

文章目录 **一 什么是NoSQL&#xff1f;****二 redis是什么&#xff1f;****三 redis五大基本类型**1 String&#xff08;字符串&#xff09;**应用场景** 2 List&#xff08;列表&#xff09;**应用场景** 3 Set&#xff08;集合&#xff09;4 sorted set&#xff08;有序集合…

【模拟集成电路】反馈系统——基础到进阶(一)

【模拟集成电路】反馈系统——基础到进阶 前言1 概述2 反馈电路特性2.1增益灵敏度降低2.2 终端阻抗变化2.3 带宽拓展2.4 非线性减小 3 放大器分类4 反馈检测和返回机制4.1 按照检测物理量分类4.2 按照检测拓扑连接分类 5 反馈结构分析6 二端口方法7 波特方法6 麦德布鲁克方法 前…

ajax-axios-url-form-serialize 插件

AJAX AJAX 概念 1.什么是 AJAX ? mdn 使用浏览器的 XMLHttpRequest 对象 与服务器通信 浏览器网页中&#xff0c;使用 AJAX技术&#xff08;XHR对象&#xff09;发起获取省份列表数据的请求&#xff0c;服务器代码响应准备好的省份列表数据给前端&#xff0c;前端拿到数据数…

Verilog同步FIFO设计

同步FIFO(synchronous)的写时钟和读时钟为同一个时钟&#xff0c;FIFO内部所有逻辑都是同步逻辑&#xff0c;常常用于交互数据缓冲。 异步FIFO&#xff1a;数据写入FIFO的时钟和数据读出FIFO的时钟是异步的(asynchronous) 典型同步FIFO有三部分组成: &#xff08;1&#xff0…

基于ssm的CRM客户管理系统(spring + springMVC + mybatis)营销业务信息java jsp源代码

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 基于ssm的CRM客户管理系统&#xff08;spring spring…

【数据结构】 单链表面试题讲解

文章目录 引言反转单链表题目描述示例&#xff1a;题解思路代码实现&#xff1a; 移除链表元素题目描述&#xff1a;示例思路解析&#xff1a; 链表的中间结点题目描述&#xff1a;示例&#xff1a;思路解析代码实现如下&#xff1a; 链表中倒数第k个结点题目描述示例思路解析&…