libxlsxwriter之如何合并单元格
创始人
2024-05-24 07:43:11
0

小白很容易挖一个技术的坑,然后填得特别慢。这不,libxlsxwriter这样一个很实用的工具,小白从开始研究到第二次接触已经有两个多月的时间。今天为了写一个测试工具,想要通过代码自动生成结果数据表格,又开始临时使用这个库,深感它的强大。于是想到什么就记录点什么,因此有了本篇博客。

1 libxlsxwriter之合并单元格

小白今天遇到的一个问题是如何进行单元格的合并。其实在libxlsxwriter的文档页上,有一系列的例程,其中有一篇例程,名为merge_range.c。小白相信这则例程已经很完整地演示了如何进行单元格的合并以及合并后单元格的格式设置。因此小白把关键注释写入代码,分享如下:

#include "xlsxwriter.h"int main() {lxw_workbook* workbook = workbook_new("merge_range.xlsx");lxw_worksheet* worksheet = workbook_add_worksheet(workbook, NULL);lxw_format* merge_format = workbook_add_format(workbook);/* 为合并后的单元格文本指定一种格式. */format_set_align(merge_format, LXW_ALIGN_CENTER);    // 水平居中format_set_align(merge_format, LXW_ALIGN_VERTICAL_CENTER); // 垂直居中format_set_bold(merge_format);  // 字体加粗format_set_bg_color(merge_format, LXW_COLOR_YELLOW); // 黄色底色背景format_set_border(merge_format, LXW_BORDER_THIN);    // 细边框/* 出于强调的考虑增大合并后单元格的大小. */worksheet_set_column(worksheet, 1, 3, 12, NULL);     // 指定第1到第3列的单元格列宽为12worksheet_set_row(worksheet, 3, 30, NULL);           // 指定第3行的行高为30worksheet_set_row(worksheet, 6, 30, NULL);           // 指定第6行的行高为30worksheet_set_row(worksheet, 7, 30, NULL);           // 指定第7行的行高为30// 注意是从第0列开始计算/* 从第3行第1列到第3行第3列进行合并,合并后按照merge_format格式设置单元格. */worksheet_merge_range(worksheet, 3, 1, 3, 3, "Merged Range", merge_format);/* 从第6行第1列一直到第7行第3列进行合并,合并后按照merge_format格式设置单元格. */worksheet_merge_range(worksheet, 6, 1, 7, 3, "Merged Range", merge_format);workbook_close(workbook);return 0;
}

在这里插入图片描述

如图所示为上述代码的效果,其中红色的字和箭头是小白标注的3行1列的位置。合并单元格的核心函数就是worksheet_merge_range函数,参数中首先指定表格名称,然后是合并的起始位置、终点位置,填充进合并单元格中的内容,以及单元格的格式。

设置单元格格式的有关函数均以format_set_**为前缀。

2. 富文本合并单元格

另一个例程,名为merge_rich_string.c,也值得顺带学习一下,与上一个例程不同的是,这个例程演示了如何在一个合并后的单元格内实现多种字体格式的混编。

#include "xlsxwriter.h"int main() {lxw_workbook* workbook = workbook_new("merge_rich_string.xlsx");lxw_worksheet* worksheet = workbook_add_worksheet(workbook, NULL);/* 为合并后的单元格指定一种格式 */lxw_format* merge_format = workbook_add_format(workbook);format_set_align(merge_format, LXW_ALIGN_CENTER);   // 水平居中format_set_align(merge_format, LXW_ALIGN_VERTICAL_CENTER);  // 垂直居中format_set_border(merge_format, LXW_BORDER_THIN);   // 细边框/* 为富文本设置格式类型. */lxw_format* red = workbook_add_format(workbook);    format_set_font_color(red, LXW_COLOR_RED);          // 红色字体lxw_format* blue = workbook_add_format(workbook);format_set_font_color(blue, LXW_COLOR_BLUE);        // 蓝色字体/* 为富文本创建不同的片段 */lxw_rich_string_tuple fragment1 = { NULL, "This is " };lxw_rich_string_tuple fragment2 = { red,  "red" };lxw_rich_string_tuple fragment3 = { NULL, " and this is " };lxw_rich_string_tuple fragment4 = { blue, "blue" };// 合并整段文本(带格式)lxw_rich_string_tuple* rich_string[] = { &fragment1, &fragment2,&fragment3, &fragment4, NULL };/* 合并单元格,此处用空字符串先暂时填充. */worksheet_merge_range(worksheet, 1, 1, 4, 3, "", merge_format);/* 覆写合并单元格中的内容,使用富文本字符串填充. */worksheet_write_rich_string(worksheet, 1, 1, rich_string, merge_format);workbook_close(workbook);return 0;
}

在这里插入图片描述

该例程生成的表格结果如图所示。可以看到这种方式可以组合出比较复杂的显示效果。

今天分享就到这里,虽然简单,但是也算有点用。

在这里插入图片描述

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...