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

news/2024/7/21 7:26:07 标签: golang, excel, 开发语言

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

func (f *File) GetCellRichText(sheet, cell string) ([]RichTextRun, error)

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

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

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成员。

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阅读的第四十一篇,鉴于本人技术水平有限,如有错误,烦请指出斧正!感谢!


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

相关文章

万字干货|Synchronized关键字详解

文章目录前言线程安全什么是synchronized关键字?synchronized实现方式1.修饰实例方法2.修饰静态方法3.修饰代码块synchronized关键字底层原理synchronized修饰实例方法monitor锁是什么?Java对象内存布局synchronized修饰代码块锁优化自旋锁锁粗化锁消除锁…

Allegro如何铺网格铜详细操作指导

Allegro如何铺网格铜的三种方法操作指导 在做PCB设计的时候,时常需要铺网格铜,尤其是对于绕性有要求的时候,Allegro可以快捷铺出网格铜,类似下图 具体操作如下 直接铺网格铜 选择Shape add Rect命令 Option Type选择Static Crosshatch 画出需要的图形 鼠标右击done,…

大厂软件测试流程完整版

目 1.概述 1.1目的 有效的保证软件质量; 有效的制定不同测试类型(软件系统测试、音频主观性测试、Field Trial、专项测试、自动化测试、性能测试、用户体验测试)的软件测试计划; 按照计划进行测试,发现软件中存在…

Kafka消息队列大数据实战教程-第四篇(Kafka客户端Producer API)

文章目录 前言一、创建生产者1.1 引入Maven依赖包1.2 构建Producer1.3 消息acks应答机制1.3.1 数据可靠性分析1.3.2 数据完全可靠条件1.3.3 数据重复分析1.3.4 数据有序1.3.5 数据乱序总结前言 提示:本章我们将使用原生API客户端的方式来连接到Kafka集群,进行Producer消息投…

Logistic回归(随机梯度上升算法)

梯度上升算法 def gradAscent(dataMatIn, classLabels):dataMatrix np.mat(dataMatIn) #转换成numpy的matlabelMat np.mat(classLabels).transpose() #转换成numpy的mat,并进行转置m, n np.shape(dataMa…

火爆全网的ChatGPT上手体验,文尾免费送账号!

文章目录1. ChatGPT公开信息2. ChatGPT上手体验3. ChatGPT目前趋势4. 福利派送1. ChatGPT公开信息 近期关于网路上对 ChatGPT(OpenAI发布的一款人工智能对话引擎)的讨论比较多。官方对ChatGPT的定义如下: We’ve trained a model called Cha…

给你讲明白MySQL的乐观锁和悲观锁

乐观锁与悲观锁是一种广义上的概念。不管是 Java 语言,也或者是其他语言以及数据库都有这类概念对应的实际应用。想要学习乐观锁和悲观锁就要学习他们的基本知识,那么下面我们来学习一下。 锁 生活中:锁在我们身边无处不在,比如我…

【Mysql】记录一些特殊的select语句

目录一.分页查询二.多表查询三.自连接四.子查询4.1单行子查询4.2多行子查询4.3临时表子查询4.4多行子查询4.5多列子查询一.分页查询 select...limit start,rows 表示从start1行开始取,取出rows行,start从0开始算 公式:limit 每页显示记录数*…