??★,°:.☆( ̄▽ ̄)/$:.°★ ??
這篇文章主要介紹Excel處理庫(kù)-libxlsxwriter配置使用。
無(wú)專精則不能成,無(wú)涉獵則不能通?!?jiǎn)⒊?/font>
歡迎來(lái)到我的博客,一起學(xué)習(xí),共同進(jìn)步。
喜歡的朋友可以關(guān)注一下,下次更新不迷路??
??1. 項(xiàng)目介紹
項(xiàng)目Github地址:https://github.com/jmcnamara/libxlsxwriter
Wiki地址:https://libxlsxwriter.github.io/
libxlsxwriter 是一個(gè)用于創(chuàng)建 Microsoft Excel XLSX 文件的C庫(kù)。它提供了一系列功能,可以讓您通過(guò)編程方式生成包含單元格、圖表、格式化等內(nèi)容的 Excel 文件。下面是 libxlsxwriter 的一些特點(diǎn)和功能:
1.跨平臺(tái)性:libxlsxwriter 可以在多個(gè)操作系統(tǒng)上工作,包括 Linux、macOS 和 Windows。
2.創(chuàng)建 XLSX 文檔:它允許您創(chuàng)建 XLSX 格式的 Excel 文檔,支持 Excel 2007 及更高版本。
3.豐富的功能:libxlsxwriter 支持創(chuàng)建工作表、單元格、公式、圖表、條件格式化、數(shù)據(jù)篩選等功能。
4.高性能:該庫(kù)被設(shè)計(jì)為具有高性能,在大型數(shù)據(jù)集的情況下生成速度快。
5.支持多種格式和樣式:您可以設(shè)置單元格的格式、字體、顏色、邊框、背景等屬性,以及應(yīng)用數(shù)值格式、日期格式、公式和函數(shù)等。
6.支持圖表:libxlsxwriter 允許您創(chuàng)建各種 Excel 圖表,如條形圖、餅圖、折線圖等,并支持自定義圖表的樣式和屬性。
但是要注意,libxlsxwriter
只能用于創(chuàng)建 XLSX 文件,不支持讀取或修改現(xiàn)有的 Excel 文件。(可以通過(guò)c++自帶的文件處理來(lái)讀取,處理后的數(shù)據(jù)再手動(dòng)導(dǎo)入到最后的表中)
??2. 環(huán)境配置
下面進(jìn)行環(huán)境配置:
# 安裝依賴
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
編譯運(yùn)行:
g++ -o main main.cpp -lxlsxwriter && ./main
??3. 使用說(shuō)明
下面進(jìn)行使用分析:
創(chuàng)建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;
}
參考某博主,生成指定個(gè)數(shù)的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 && ./main
std::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); // 設(shè)置列寬
// write header
worksheet_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])); // 讀取命令行,生成幾個(gè)uuid
return 0;
}
結(jié)合CGAL計(jì)算幾何庫(kù)對(duì)txt點(diǎn)集進(jìn)行處理,并處理后的數(shù)據(jù)寫入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 && ./main
int main() {
// 1. 從文本文件中讀取 XY 點(diǎn)集
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. 將處理后的點(diǎn)集寫入 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;
}
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-657781.html
以上。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-657781.html
到了這里,關(guān)于【C++】開源:跨平臺(tái)Excel處理庫(kù)-libxlsxwriter配置使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!