Go-Excelize API源码阅读(四十一)——GetCellRichText

2022-12-09 15:12:38 浏览数 (1)

Go-Excelize API源码阅读(四十一)——GetCellRichText

开源摘星计划(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 或更高版本。

二、GetCellRichText
代码语言:javascript复制
func (f *File) GetCellRichText(sheet, cell string) ([]RichTextRun, error)

根据给定的工作表、单元格坐标获取指定单元格的富文本格式。

废话少说,直接上源代码:

代码语言:javascript复制
func getCellRichText(si *xlsxSI) (runs []RichTextRun) {
	for _, v := range si.R {
		run := RichTextRun{
			Text: v.T.Val,
		}
		if v.RPr != nil {
			run.Font = newFont(v.RPr)
		}
		runs = append(runs, run)
	}
	return
}

参数si是xlsxSI类型:

xlsxSI(字符串项)是共享字符串表中单个字符串的表示。如果字符串只是一个简单的字符串,并在单元格一级应用了格式化,那么字符串项(si)应该包含一个用于表达字符串的单一文本元素。然而,如果单元格中的字符串更加复杂——即在字符级别应用了格式化(那么字符串项应包含多个富文本运行,它们共同用来表达字符串)。

遍历si.R,这是一个xlsxR类型的切片,xlsxR表示富文本,即带有格式化的字符串。

获取每一个xlsxR对象,然后新建一个run变量,其是RichTextRun结构体,RichTextRun直接映射富文本的设置。将v.t.val赋给Text成员。

代码语言:javascript复制
if v.RPr != nil {
	run.Font = newFont(v.RPr)
}

然后是第二部分,我们可以了解这是当v的RPr属性存在时,给run的Font成员赋一个newFont对象,传过去的参数就是v.RPr。

newFont通过给定的run属性为富文本创建字体格式。

返回值是runs []RichTextRun,我们将si.R中的所有成员处理成为run然后append到返回值runs里面。

结语

这是Excelize API阅读的第四十一篇,鉴于本人技术水平有限,如有错误,烦请指出斧正!感谢!

0 人点赞