0 课程表

这个需求可以从日常实例中获得:课程表。
我们常见的课程表有时候是这样的:

大家注意到在左上角的单元格内有一条分割线,把同一个单元格分成两部分。那么在libxlsxwriter中如何实现这一效果呢?

1 官网例程

贴一段官网上的例程代码:

/** A simple formatting example that demonstrates how to add diagonal* cell borders using the libxlsxwriter library.** Copyright 2014-2021, John McNamara, jmcnamara@cpan.org**/#include "xlsxwriter.h"int main() {/* Create a new workbook and add a worksheet. */lxw_workbook* workbook = workbook_new("diagonal_border.xlsx");lxw_worksheet* worksheet = workbook_add_worksheet(workbook, NULL);/* Add some diagonal border formats. */lxw_format* format1 = workbook_add_format(workbook);format_set_diag_type(format1, LXW_DIAGONAL_BORDER_UP);lxw_format* format2 = workbook_add_format(workbook);format_set_diag_type(format2, LXW_DIAGONAL_BORDER_DOWN);lxw_format* format3 = workbook_add_format(workbook);format_set_diag_type(format3, LXW_DIAGONAL_BORDER_UP_DOWN);lxw_format* format4 = workbook_add_format(workbook);format_set_diag_type(format4, LXW_DIAGONAL_BORDER_UP_DOWN);format_set_diag_border(format4, LXW_BORDER_HAIR);format_set_diag_color(format4, LXW_COLOR_RED);worksheet_write_string(worksheet, CELL("B3"), "Text", format1);worksheet_write_string(worksheet, CELL("B6"), "Text", format2);worksheet_write_string(worksheet, CELL("B9"), "Text", format3);worksheet_write_string(worksheet, CELL("B12"), "Text", format4);workbook_close(workbook);return 0;
}

这段例程中的关键在于format_set_diag_type(format1, LXW_DIAGONAL_BORDER_UP)函数的使用,指定了对角线的类型。
类型一共有两种,分别是LXW_DIAGONAL_BORDER_UP,LXW_DIAGONAL_BORDER_DOWN.
当然你也可以像这个示例程序中一样,把两种类型的对角线画在同一个单元格之中。

2 课程表实例

小白在官网实例的基础上改造了一下,生成如篇首的那种课程表:

#include "xlsxwriter.h"
#include <iostream>
#include <wchar.h>
#include <windows.h>
#include <vector>
#include <string>#define TOCN(x) GBKToUTF8(x).data()using std::string;
using std::vector;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;
}/* 向worksheet中写入一些数据. */
void write_worksheet_data(lxw_worksheet* worksheet, lxw_format* sheetformat) {vector<vector<string>> data ={{"", TOCN("星期一"), TOCN("星期二"), TOCN("星期三"), TOCN("星期四"), TOCN("星期五")},{TOCN("第一节"), TOCN("语文"), TOCN("数学"), TOCN("英语"), TOCN("物理"), TOCN("化学")},{TOCN("第二节"), TOCN("数学"), TOCN("英语"), TOCN("物理"), TOCN("化学"), TOCN("语文")},{TOCN("第三节"), TOCN("英语"), TOCN("物理"), TOCN("化学"), TOCN("语文"), TOCN("数学")},{TOCN("第四节"), TOCN("物理"), TOCN("化学"), TOCN("语文"), TOCN("数学"), TOCN("英语")},{TOCN("第五节"), TOCN("化学"), TOCN("语文"), TOCN("数学"), TOCN("英语"), TOCN("物理")}};int row, col;for (row = 13; row < 19; row++){for (col = 1; col < 7; col++){worksheet_write_string(worksheet, row, col, data[row - 13][col - 1].data(), sheetformat);}}
}/* 创建一个带有图表的表格文件. */
int main(int argc, char* argv[])
{lxw_workbook* workbook = workbook_new(GBKToUTF8("斜分割线示例.xlsx").data());lxw_worksheet* worksheet = workbook_add_worksheet(workbook, NULL);/* 来自官网例程的部分 */lxw_format* format1 = workbook_add_format(workbook);format_set_diag_type(format1, LXW_DIAGONAL_BORDER_UP);lxw_format* format2 = workbook_add_format(workbook);format_set_diag_type(format2, LXW_DIAGONAL_BORDER_DOWN);lxw_format* format3 = workbook_add_format(workbook);format_set_diag_type(format3, LXW_DIAGONAL_BORDER_UP_DOWN);lxw_format* format4 = workbook_add_format(workbook);format_set_diag_type(format4, LXW_DIAGONAL_BORDER_UP_DOWN);format_set_diag_border(format4, LXW_BORDER_HAIR);format_set_diag_color(format4, LXW_COLOR_RED);worksheet_write_string(worksheet, CELL("B3"), "Text", format1);worksheet_write_string(worksheet, CELL("B6"), "Text", format2);worksheet_write_string(worksheet, CELL("B9"), "Text", format3);worksheet_write_string(worksheet, CELL("B12"), "Text", format4);/* 自己做一个简单的例子 */lxw_format* format5 = workbook_add_format(workbook);format_set_diag_type(format5, LXW_DIAGONAL_BORDER_DOWN);format_set_align(format5, LXW_ALIGN_VERTICAL_DISTRIBUTED);format_set_align(format5, LXW_ALIGN_LEFT);format_set_border(format5, LXW_BORDER_THIN);format_set_font_size(format5, 11);lxw_format* format6 = workbook_add_format(workbook);format_set_font_size(format6, 11);format_set_border(format6, LXW_BORDER_THIN);format_set_align(format6, LXW_ALIGN_VERTICAL_CENTER);format_set_align(format6, LXW_ALIGN_CENTER);write_worksheet_data(worksheet, format6);// 通过设置行高列宽来控制单元格格式worksheet_set_row(worksheet, 13, 27.75, NULL);worksheet_set_column(worksheet, COLS("B:B"), 8.5, NULL);// 通过空格的控制使上下分离worksheet_write_string(worksheet, CELL("B14"), TOCN("    星期\n课程    "), format5);return workbook_close(workbook);
}

这段代码的关键:

  • format_set_align(format5, LXW_ALIGN_VERTICAL_DISTRIBUTED)指定纵向分散对齐;
  • format_set_align(format5, LXW_ALIGN_LEFT)指定横向左对齐;
  • worksheet_set_row(worksheet, 13, 27.75, NULL)设定单元格的行高;
  • worksheet_set_column(worksheet, COLS("B:B"), 8.5, NULL)设定单元格的列宽;
  • 通过在文本中添加空格和换行符使两个单词文本上下分离并左右对齐;
  • 行高和列宽值是根据字体的大小设置的,也是手动尝试的一个过程。

代码的效果:

从libxlsxwriter的作者提供的示例程序来看,单元格斜线的用法主要是用来标注“红叉”或“删除”的意思。这和本文的“课程表”实例对单元格斜线的用法大有不同。
小白也认为这种“课程表”的用法现在也比较少见了。不过作为一种使用技巧,如果有需要的话,还是可以参考一下。
【水平所限,错漏难免。创作不易,轻喷勿骂】

libxlsxwriter在单元格中间划斜线相关推荐

  1. excel怎么一个格子斜分_excel如何在单元格里加上斜线分割内容

    在excel制作表格时,有时要把单元格分割成二栏或者是三栏.如下图箭头所指的样式.已懂操作的朋友们会觉得很简单,但对于一些刚学着用excel制作表格的同学来说,也算是比较头痛的.那么,今天给大家分享下 ...

  2. excel怎么一个格子斜分_Excel 电子表格 一个单元格设置了斜线,把单元格分成两个三角...

    方法一:可以利用 Excel 中的绘图工具. Excel 中的绘图工具栏在默认情况下没有打开,在 工具栏空白处点击右键, 打开绘图工具栏.然后调整好单元格的大小, 画好所需斜线, 在空 白处画文本框, ...

  3. 4.4 给单元格快速添加斜线 [原创Excel教程]

    原文:http://coolketang.com/staticOffice/5a97f2f617d009003591c9b6.html 1. 本节课将为您演示,如何给单元格绘制一条对角斜线.在日常工作 ...

  4. Office EXCEL 中单元格怎么打斜线

    右击单元格,然后设置单元格格式,然后添加需要的边框 注意里面的文字有讲究,比如我要右上角显示Value,左下角显示Payload,则需要先输一堆空格,然后输入Value,把Value挤到右边去,然后按 ...

  5. qt在表格中如何画线_如何在电子表格中的某单元格内画一根长线

    以OFFICE 2007 EXCEL为例,介绍一下如何在EXCEL的单元格内划斜线: 一.EXCEL2007单元格加对角线步骤: 1.首先,选中单元格,然后右键,再选择设置单元格格式,在弹出的设置单元 ...

  6. 如何给excel的单元格添加斜线并在对角线

     问     如何给excel的单元格添加斜线并在对角线两边添加内容   答     选中要添加斜线表头的单元格点右键选择设置单元格格式点边框选项卡选择边框选项的最后一 个对角线即 ...

  7. php把1拆分成三份,谁知道Excel电子表格怎么把一个单元格分3份(分成3个三角)! | excle表格怎么分割三份...

    请问,excel表格的单元格怎么一分为二或一分为三,是拆分,与合并无关,请高手指教 excel拆分已合并的格的步骤: 三行单元格目前处于一个单元格状态. 选还原的单元格,右键鼠标,在工具栏中选择快捷转 ...

  8. Excel2003怎样拆分单元格

    在EXCEL中,单个的单元格是无法拆分的,你最多在其中增加一条斜线,方法是右键点单元格,选"设置单元格格式",在"边框"选项卡中有. 如果选取多个单元格,你可以 ...

  9. latex 单元格 斜杠_如何在Excel中的单元格中启用键入斜杠

    latex 单元格 斜杠 By default, the slash (/) key displays the shortcuts to the commands on the ribbon in E ...

最新文章

  1. 小程序云开发,判断数据库表的两个字段匹配 云开发数据库匹配之 and 和 or 的配合使用
  2. EFQRCode:自动生成花式二维码
  3. 专题 12 IPC之消息队列
  4. 农历控件源码(C#)
  5. 使用jdbc执行SQL实现登录查询2-避免SQL注入版
  6. 你的实力就等于别人对待你的态度
  7. 自己对war包解压的误区
  8. 金融期货具体的开户条件
  9. 常见软件架构风格介绍
  10. 【2017-01-09】 资料链接摘录
  11. 销售型呼叫中心系统特点
  12. Biotin-PEG-CHO,生物素PEG醛基
  13. 一个基于百度云和图灵的人工智能(智障)程序
  14. 在标准ASCII码表中,已知英文字母K的十六进制码值是4B,则二进制ASCII码1001000对应的字符是( )
  15. 【AlgorithmTraining】08:Leetcode(上)
  16. OCR识别系列之一-----文档字符识别
  17. 电脑怎么远程连接服务器?如何进行远程桌面连接?
  18. 点击文本框弹出热门标签
  19. 怎么让手机和电脑处于一个局域网 电脑本机发布的项目(非阿里云发布),怎么让手机也可以访问电脑发布的项目
  20. 如何把在一些管家软件下载的谷歌卸载干净(谷歌卸载不干净、安装不成功的原因,谷歌首页被360篡改)

热门文章

  1. 电商直播真的只是电视购物的升级吗?
  2. 2022年中山大学计算机考研复试分数线预测
  3. 自己整理的vue实现生成分享海报(含二维码),看着网上的没实现
  4. vue 全局键盘_Vue项目给应用绑定键盘快捷键
  5. 给Adobe Reader添加书签功能
  6. 〖Python WEB 自动化测试实战篇⑯〗- WEB自动化的总结与未来技术上的展望
  7. SPSS常用的相关性分析方法解析(转载)
  8. 手机计算机怎么打错误,极客修:手机计算器集体出错!输入这2个数字,我傻了...
  9. spring中的Aware接口原来是这么回事
  10. 商城电商day07 商品详情页面优化