libxlsxwriter设置字体格式

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实现了“字体自由”。

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值