Go-Excelize API源码阅读(十九)——SetHeaderFooter

开源摘星计划(WeOpen Star) 是由腾源会 2022 年推出的全新项目,旨在为开源人提供成长激励,为开源项目提供成长支持,助力开发者更好地了解开源,更快地跨越鸿沟,参与到开源的具体贡献与实践中。

不管你是开源萌新,还是希望更深度参与开源贡献的老兵,跟随“开源摘星计划”开启你的开源之旅,从一篇学习笔记、到一段代码的提交,不断挖掘自己的潜能,最终成长为开源社区的“闪亮之星”。

我们将同你一起,探索更多的可能性!

项目地址: WeOpen-Star:https://github.com/weopenprojects/WeOpen-Star

一、Go-Excelize简介

Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Microsoft Excel™ 2007 及以上版本创建的电子表格文档。支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多种文档格式,高度兼容带有样式、图片(表)、透视表、切片器等复杂组件的文档,并提供流式读写 API,用于处理包含大规模数据的工作簿。可应用于各类报表平台、云计算、边缘计算等系统。使用本类库要求使用的 Go 语言为 1.15 或更高版本。

二、 SetHeaderFooter

func (f *File) SetHeaderFooter(sheet string, settings *FormatHeaderFooter) error

该API的作用是根据给定的工作表名称和控制字符设置工作表的页眉和页脚。

页眉和页脚包含如下字段:

字段 描述
AlignWithMargins 设定页眉页脚页边距与页边距对齐
DifferentFirst 设定第一页页眉和页脚
DifferentOddEven 设定奇数和偶数页页眉和页脚
ScaleWithDoc 设定页眉和页脚跟随文档缩放
OddFooter 奇数页页脚控制字符
OddHeader 奇数页页眉控制字符
EvenFooter 偶数页页脚控制字符
EvenHeader 偶数页页眉控制字符
FirstFooter 首页页脚控制字符
FirstHeader 首页页眉控制字符

接下来是OddHeader, OddFooter, EvenHeader, EvenFooter, FirstFooter, FirstHeader这六个字符串字段的格式代码。

//     Formatting Code        | Description
//    ------------------------+-------------------------------------------------------------------------
//     &&                     | The character "&"
//                            |
//     &font-size             | Size of the text font, where font-size is a decimal font size in points
//                            |
//     &"font name,font type" | A text font-name string, font name, and a text font-type string,
//                            | font type
//                            |
//     &"-,Regular"           | Regular text format. Toggles bold and italic modes to off
//                            |
//     &A                     | Current worksheet's tab name
//                            |
//     &B or &"-,Bold"        | Bold text format, from off to on, or vice versa. The default mode is off
//                            |
//     &D                     | Current date
//                            |
//     &C                     | Center section
//                            |
//     &E                     | Double-underline text format
//                            |
//     &F                     | Current workbook's file name
//                            |
//     &G                     | Drawing object as background
//                            |
//     &H                     | Shadow text format
//                            |
//     &I or &"-,Italic"      | Italic text format
//                            |
//     &K                     | Text font color
//                            |
//                            | An RGB Color is specified as RRGGBB
//                            |
//                            | A Theme Color is specified as TTSNNN where TT is the theme color Id,
//                            | S is either "+" or "-" of the tint/shade value, and NNN is the
//                            | tint/shade value
//                            |
//     &L                     | Left section
//                            |
//     &N                     | Total number of pages
//                            |
//     &O                     | Outline text format
//                            |
//     &P[[+|-]n]             | Without the optional suffix, the current page number in decimal
//                            |
//     &R                     | Right section
//                            |
//     &S                     | Strikethrough text format
//                            |
//     &T                     | Current time
//                            |
//     &U                     | Single-underline text format. If double-underline mode is on, the next
//                            | occurrence in a section specifier toggles double-underline mode to off;
//                            | otherwise, it toggles single-underline mode, from off to on, or vice
//                            | versa. The default mode is off
//                            |
//     &X                     | Superscript text format
//                            |
//     &Y                     | Subscript text format
//                            |
//     &Z                     | Current workbook's file path

下面是笔者翻译的版本:

//     Formatting Code        | Description
//    ------------------------+-------------------------------------------------------------------------
//     &&                     | 字符"&"
//                            |
//     &font-size             | 代表以磅为单位的十进制文本字体大小
//                            |
//     &"font name,font type" | 文本字体名称字符串,字体名称,以及文本字体类型字符串,
//                            | 字体类型
//                            |
//     &"-,Regular"           | 常规文本格式。粗体和斜体模式默认为关闭状态
//                            |
//     &A                     | 当前工作表名称
//                            |
//     &B or &"-,Bold"        | 粗体文本格式,从关闭转变到开启,或者反过来。默认模式是关闭
//                            |
//     &D                     | 当前的日期
//                            |
//     &C                     | 中间部分
//                            |
//     &E                     | 使用双下划线
//                            |
//     &F                     | 当前的工作簿文件名称
//                            |
//     &G                     | 将该对象设置为背景
//                            |
//     &H                     | 文字阴影
//                            |
//     &I or &"-,Italic"      | 文字斜体
//                            |
//     &K                     | 字体颜色
//                            |
//                            | 例如格式为 RRGGBB 的 RGB 颜色
//                            |
//                            | 一个主题色被指定为TTSNNN,其中TT是主题色ID,S是色调/阴影值的 "+"或"-",NNN是色调/阴影值。
//                            |
//     &L                     | 左侧部分
//                            |
//     &N                     | 页面总数
//                            |
//     &O                     | 大纲文本格式
//                            |
//     &P[[+|-]n]             | 如果没有可选的后缀,当前的页码,默认为十进制。
//                            |
//     &R                     | 右侧部分
//                            |
//     &S                     | 文本删除线
//                            |
//     &T                     | 当前时间
//     &U                     | 单下划线文本格式. 如果双下划线模式启用了,
//                            | 在一个章节中的下划线会关闭双下划线模式。
//                            | 否则,它将切换单下线模式,从关闭到开启,或者反过来。
//                            | 默认模式是关闭。
//                            |
//     &X                     | 上标格式
//                            |
//     &Y                     | 下标格式
//                            |
//     &Z                     | 当前工作簿文件路径

注释给了一个例子:

// For example:
//
//    err := f.SetHeaderFooter("Sheet1", &excelize.FormatHeaderFooter{//        DifferentFirst:   true,
//        DifferentOddEven: true,
//        OddHeader:        "&R&P",
//        OddFooter:        "&C&F",
//        EvenHeader:       "&L&P",
//        EvenFooter:       "&L&D&R&T",
//        FirstHeader:      `&CCenter &"-,Bold"Bold&"-,Regular"HeaderU+000A&D`,
//    })

根据上面的格式代码详解,我们可以清楚的知道:
DifferentFirst: true代表的是第一页有页眉和页脚。
DifferentOddEven: true代表奇数和偶数页页眉和页脚是不同的。
OddHeader: "&R&P"代表奇数页的页眉右侧部分为当前十进制的页码。
OddFooter: "&C&F"代表奇数页的页脚中心部分为当前工作簿的文件名。
EvenHeader: "&L&P"代表偶数页的页眉左侧部分为当前十进制的页码。
EvenFooter: "&L&D&R&T"代表偶数页页脚的左侧部分为当前日期,右侧部分为当前时间。

FirstHeader:   `&CCenter &"-,Bold"Bold&"-,Regular"HeaderU+000A&D`

上面这段代表第一页页眉中心部分第一行为"Center Bold Header",第二行为日期。
第一页没有设置页脚。

说明了该API的所有参数之后,我们来看看源码:

func (f *File) SetHeaderFooter(sheet string, settings *FormatHeaderFooter) error {ws, err := f.workSheetReader(sheet)if err != nil {return err}if settings == nil {ws.HeaderFooter = nilreturn err}v := reflect.ValueOf(*settings)for i := 4; i < v.NumField()-1; i++ {if len(utf16.Encode([]rune(v.Field(i).String()))) > MaxFieldLength {return newFieldLengthError(v.Type().Field(i).Name)}}ws.HeaderFooter = &xlsxHeaderFooter{AlignWithMargins: settings.AlignWithMargins,DifferentFirst:   settings.DifferentFirst,DifferentOddEven: settings.DifferentOddEven,ScaleWithDoc:     settings.ScaleWithDoc,OddHeader:        settings.OddHeader,OddFooter:        settings.OddFooter,EvenHeader:       settings.EvenHeader,EvenFooter:       settings.EvenFooter,FirstFooter:      settings.FirstFooter,FirstHeader:      settings.FirstHeader,}return err
}

先是读取工作表,然后判断参数settings是不是为空,如果为空,就给HeaderFooter赋值为nil 然后结束。

如果不是,那么就使用反射来检查OddHeader, OddFooter, EvenHeader, EvenFooter,FirstFooter, FirstHeader这六个字段。

然后检查没有问题后就将settings参数内的值赋给HeaderFooter。

三、结语

这里是老岳,这是Go语言相关源码的解读第十九篇,我会不断努力,给大家带来更多类似的文章,恳请大家不吝赐教。

Go-Excelize API源码阅读(十九)——SetHeaderFooter相关推荐

  1. Go-Excelize API源码阅读(三十一)——ProtectSheet(sheet string, settings *SheetProtectionOptions)

    Go-Excelize API源码阅读(三十一)-- ProtectSheet(sheet string, settings *SheetProtectionOptions) 开源摘星计划(WeOpe ...

  2. Soul网关源码阅读(九)插件配置加载初探

    Soul网关源码阅读(九)插件配置加载初探 简介     今日来探索一下插件的初始化,及相关的配置的加载 源码Debug 插件初始化     首先来到我们非常熟悉的插件链调用的类: SoulWebHa ...

  3. 深入剖析Spring Web源码(十九) - 整理的文档和日志的索引(第一版)

    整理的文档 把所有的<深入剖析Spring Web>系列日志整理成为文档,供大家下载阅读,希望对大家有所帮助.里面有些章节尚未完成,所以称为第一版.希望不久的将来,能把没有完成的章节在第二 ...

  4. Spark之SQL解析(源码阅读十)

    如何能更好的运用与监控sparkSQL?或许我们改更深层次的了解它深层次的原理是什么.之前总结的已经写了传统数据库与Spark的sql解析之间的差别.那么我们下来直切主题~ 如今的Spark已经支持多 ...

  5. 【转】ABP源码分析十九:Auditing

    审计跟踪(也叫审计日志)是与安全相关的按照时间顺序的记录,它们提供了活动序列的文档证据,这些活动序列可以在任何时间影响一个特定的操作. AuditInfo:定义如下图中需要被Audit的信息. Aud ...

  6. robotframework API 源码阅读笔记----robot.utils.asserts

    http://robot-framework.readthedocs.io/en/latest/autodoc/robot.utils.html#robot.utils.asserts.assert_ ...

  7. sina微博api源码阅读之函数

    1. array_map将类的静态成员函数作为回调函数用在指定的单元上,可以递归调用 public static function urlencode_rfc3986($input) {        ...

  8. ORB-SLAM2的源码阅读(九):Initializer类

    还是博客写的顺序有些问题,应该一开始就写初始化来着... #ifndef INITIALIZER_H #define INITIALIZER_H#include<opencv2/opencv.h ...

  9. Soul网关源码阅读(十)自定义简单插件编写

    Soul网关源码阅读(十)自定义简单插件编写 简介     综合前面所分析的插件处理流程相关知识,此次我们来编写自定义的插件:统计请求在插件链中的经历时长 编写准备     首先我们先探究一下,一个P ...

最新文章

  1. 移动web开发常用JavaScript代码(转)
  2. Python/Jupyter Notebook以及可视化的运用
  3. mysql 导出中文乱码_sqoop导出到mysql中文乱码问题总结、utf8、gbk
  4. boost::gil::pixel_bit_size用法的测试程序
  5. QT的QFontDialog类的使用
  6. android 获取当前画布,Android硬件位图填坑之获取硬件画布
  7. python xmlns 解析_使用python读取标记中包含xmlns的XML文件
  8. 二叉树相关面试题(二)
  9. java实例变量,局部变量,类变量和final变量
  10. 给你个选择Mac的理由,浅谈Macos系统的优点
  11. 职务与职级并行套改表_职务职级并行没有如期而至,2020年会如愿而至吗?
  12. 接收机灵敏度的计算公式推导和分析
  13. eclipse快捷键总结
  14. python爬虫--爬取某网站电影下载地址
  15. 【小程序】小程序多次扫描不同二维码参数不生效问题
  16. 淘宝 触屏主页面 菜单
  17. java 根据经纬度获取区域面积
  18. 2021年展望Android原生开发的现状,你不懂还不学?
  19. 安防工程管理和运维对系统效能重要性
  20. FMC板卡标准(一)介绍及FMC兼容

热门文章

  1. Java实现输出水仙花数
  2. wps表格应用技巧(一)
  3. 最大的私募公司是哪家?黑石创始人是谁?《黑石的选择》好书推荐
  4. 奉命谋杀(Ordeal by innocence)
  5. 江苏省计算机专业推荐专转本院校,目前江苏专转本院校名单是哪些
  6. Linux运维工程师如何入门
  7. 竞选计算机课代表演讲稿开头,竞选课代表演讲稿三篇
  8. 华为手机安装NM卡无法识别
  9. 如何编写通达信数据接口l2与MACD有效结合的源码?
  10. Pr 入门教程如何在时间轴上修剪剪辑?