libxlsxwriter设置字体格式

news/2024/7/21 6:09:35 标签: libxlsxwriter, c++, excel

1 小试牛刀

libxlsxwriter可以控制所生成表格中的字体格式。
我们首先来看一下libxlsxwriter官方提供的例程,小白将关键注释翻译出来:

#include "xlsxwriter.h"

int main() {

	/* 生成一个新的数据表. */
	lxw_workbook* workbook = workbook_new("format_font.xlsx");

	/* 添加一个sheet. */
	lxw_worksheet* worksheet = workbook_add_worksheet(workbook, NULL);

	/* 增宽单元格的宽度 */
	worksheet_set_column(worksheet, 0, 0, 20, NULL);

	/* 添加一些格式 */
	lxw_format* format1 = workbook_add_format(workbook);
	lxw_format* format2 = workbook_add_format(workbook);
	lxw_format* format3 = workbook_add_format(workbook);

	/* 为格式1加粗字体. */
	format_set_bold(format1);

	/* 为格式2使用斜体. */
	format_set_italic(format2);

	/* 为格式3使用加粗斜体. */
	format_set_bold(format3);
	format_set_italic(format3);

	/* 以三种格式书写文字 */
	worksheet_write_string(worksheet, 0, 0, "This is bold", format1);
	worksheet_write_string(worksheet, 1, 0, "This is italic", format2);
	worksheet_write_string(worksheet, 2, 0, "Bold and italic", format3);

	/* 关闭工作表,释放内存. */
	workbook_close(workbook);

	return 0;
}

生成的表格如下所示,可以看到这是默认的Calibri字体的粗体、意大利斜体、粗体加意大利斜体。

在这里插入图片描述

2 进阶

如果我们想使用其他的字体,例如中文字体,或者是自己安装的第三方变体,那么我们首先要弄清这些字体的英文名称。
分享以下博客给大家对照:CSS font-family 各名称一览表

小白写了以下一些典型中文字体,以及小白自己下载安装的阿里巴巴普惠体作为示例:
(出于中文显示的需要,使用了硬转码的方式,详情可参看小白的另一篇博客libxlsxwriter中文报错问题

#include "xlsxwriter.h"
#include <iostream>
#include <wchar.h>
#include <windows.h>

using std::string;

string GBKToUTF8(const char* strGBK)
{
	int len = MultiByteToWideChar(CP_ACP, 0, strGBK, -1, NULL, 0);
	wchar_t* wstr = new wchar_t[len + 1];
	memset(wstr, 0, len + 1);
	MultiByteToWideChar(CP_ACP, 0, strGBK, -1, wstr, len);
	len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);
	char* str = new char[len + 1];
	memset(str, 0, len + 1);
	WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, len, NULL, NULL);
	string strTemp = str;
	if (wstr) delete[] wstr;
	if (str) delete[] str;
	return strTemp;
}

int main() 
{
    lxw_workbook* workbook = workbook_new("hello_world.xlsx");
    lxw_worksheet* worksheet = workbook_add_worksheet(workbook, NULL);

	lxw_format* formatFont1 = workbook_add_format(workbook);
	format_set_bold(formatFont1);

	lxw_format* formatFont2 = workbook_add_format(workbook);
	format_set_italic(formatFont2);

	lxw_format* formatFont3 = workbook_add_format(workbook);
	format_set_font_name(formatFont3, "Alibaba PuHuiTi");

	lxw_format* formatFont4 = workbook_add_format(workbook);
	format_set_font_name(formatFont4, "Alibaba PuHuiTi Heavy");

	lxw_format* formatFont5 = workbook_add_format(workbook);
	format_set_font_name(formatFont5, "SimHei");

	lxw_format* formatFont6 = workbook_add_format(workbook);
	format_set_font_name(formatFont6, "SimSun");

	lxw_format* formatFont7 = workbook_add_format(workbook);
	format_set_font_name(formatFont7, "Kaiti");

	lxw_format* formatFont8 = workbook_add_format(workbook);
	format_set_font_size(formatFont8, 16);

	lxw_format* formatFont9 = workbook_add_format(workbook);
	format_set_font_color(formatFont9, LXW_COLOR_RED);
	
	/* 增宽单元格的宽度 */
	worksheet_set_column(worksheet, 0, 0, 25, NULL);

	worksheet_write_string(worksheet, 0, 0, GBKToUTF8("原始的字体").data(), NULL);
    worksheet_write_string(worksheet, 1, 0, GBKToUTF8("加粗的字体").data(), formatFont1);
	worksheet_write_string(worksheet, 2, 0, GBKToUTF8("意大利斜体").data(), formatFont2);
	worksheet_write_string(worksheet, 3, 0, GBKToUTF8("阿里巴巴普惠体").data(), formatFont3);
	worksheet_write_string(worksheet, 4, 0, GBKToUTF8("阿里巴巴普惠体Heavy").data(), formatFont4);
	worksheet_write_string(worksheet, 5, 0, GBKToUTF8("黑体").data(), formatFont5);
	worksheet_write_string(worksheet, 6, 0, GBKToUTF8("宋体").data(), formatFont6);
	worksheet_write_string(worksheet, 7, 0, GBKToUTF8("楷体").data(), formatFont7);
	worksheet_write_string(worksheet, 8, 0, GBKToUTF8("16号字体").data(), formatFont8);
	worksheet_write_string(worksheet, 9, 0, GBKToUTF8("红色字体").data(), formatFont9);
    workbook_close(workbook);

    return 0;
}

上述代码中,核心就是

  • 创建一个lxw_format格式对象
  • 使用format_set_font_name设置字体名称
  • 使用format_set_font_size设置字体大小
  • 使用format_set_font_color设置字体颜色

上述代码的显示效果如下:
在这里插入图片描述

这样就基于libxlsxwriter实现了“字体自由”。

在这里插入图片描述


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

相关文章

Netty 面试难题分析

Netty 是如何解决 JDK 中的 Selector BUG 的&#xff1f; Selector BUG&#xff1a;JDK NIO 的 BUG&#xff0c;例如臭名昭著的 epoll bug&#xff0c;它会导致 Selector 空轮询&#xff0c; 最终导致 CPU 100%。官方声称在 JDK1.6 版本的 update18 修复了该问题&#xff0c;但…

普冉PY32系列(五) 使用JLink RTT代替串口输出日志

目录 普冉PY32系列(一) PY32F0系列32位Cortex M0 MCU简介普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境普冉PY32系列(三) PY32F002A资源实测 - 这个型号不简单普冉PY32系列(四) PY32F002A/003/030的时钟设置普冉PY32系列(五) 使用JLink RTT代替串口输出日志 JLink …

js逆向-某头条_signature参数

前言 头条的加密参数_signature其实可以通过搜索来直接定位到关键位置&#xff0c;我们换种定位的方法 定位 先查看下堆栈&#xff0c;直接在第一个XMLHttpRequest.send的位置下上断点&#xff0c;然后下拉触发断点 这个位置还有其他请求&#xff0c;这里只看/api/pc/list…

A. Greatest Convex

time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output You are given an integer k&#xfffd;. Find the largest integer x&#xfffd;, where 1≤x<k1≤&#xfffd;<&#xfffd;, such that x…

C++中的强制类型转换

接触过C语言的朋友都知道&#xff0c;C语言中也有强制类型转换&#xff0c;但是C语言中的强制类型转换会有一些问题&#xff0c;比如&#xff1a; int a 0x1234; char b (char)a; 上述的代码出现一个问题就是a 这个int型强制转化成b 这个char型时损失了一些精度&#xff0c…

内网渗透(十八)之Windows协议认证和密码抓取-本地认证(NTML哈希和LM哈希)

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…

SpringBoot开发规范部分通用模板+idea配置【项目通用-1】

SpringBoot开发规范通用模板 1 分页插件使用 通过MybatisPlus配置分页插件拦截器 Configuration MapperScan("com.xuecheng.content.mapper") public class MybatisPlusConfig {//定义分页的拦截器Beanpublic MybatisPlusInterceptor getMybatisPlusInterceptor() {…

CentOS7 配置共享文件夹

1、SSH连接CentOS&#xff0c;使用“rpm -qi samba"命令查询是否已经安装了Samba&#xff0c;如果没有安装&#xff0c;使用“yum install samba”命令&#xff0c;下载Samba包并安装&#xff0c;输入“y”&#xff0c;确认安装软件和软件依赖包。 2、使用“rpm -qa | gr…