Go-Excelize API源码阅读(二十五)——GetSheetName、GetSheetIndex、GetSheetMap()
Go-Excelize API源码阅读(二十五)——GetSheetName、GetSheetIndex、GetSheetMap()
开源摘星计划(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 或更高版本。
二、 GetSheetName(index int)
func (f *File) GetSheetName(index int) string
根据给定的工作表索引获取工作表名称,如果工作表不存在将返回空字符。
直接来看源代码:
// GetSheetName provides a function to get the sheet name of the workbook by
// the given sheet index. If the given sheet index is invalid, it will return
// an empty string.
func (f *File) GetSheetName(index int) (name string) {for idx, sheet := range f.GetSheetList() {if idx == index {name = sheetreturn}}return
}
代码逻辑很简单,直接遍历文件的工作表,然后判断工作表的idx是不是我们要找的index,如果是的话,将同时获取到的sheet赋值给name,然后返回。
三、GetSheetIndex(sheet string)
func (f *File) GetSheetIndex(sheet string) int
根据给定的工作表名称获取该工作表的索引,如果工作表不存在将返回 -1。
获取到的索引可以在设置工作簿默认工作表时,作为调用 SetActiveSheet() 函数的参数使用。
直接来看源代码:
// GetSheetIndex provides a function to get a sheet index of the workbook by
// the given sheet name, the sheet names are not case-sensitive. If the given
// sheet name is invalid or sheet doesn't exist, it will return an integer
// type value -1.
func (f *File) GetSheetIndex(name string) int {for index, sheet := range f.GetSheetList() {if strings.EqualFold(sheet, trimSheetName(name)) {return index}}return -1
}
代码逻辑很简单,先遍历工作表列表得到index、sheet。
然后使用strings.EqualFold使得sheer和剪枝之后的name忽略大小写进行比较,如果相等,就返回index,否则返回-1。
下面是trimSheetName的源代码。
// trimSheetName provides a function to trim invalid characters by given worksheet
// name.
func trimSheetName(name string) string {if strings.ContainsAny(name, ":\\/?*[]") || utf8.RuneCountInString(name) > 31 {r := make([]rune, 0, 31)for _, v := range name {switch v {case 58, 92, 47, 63, 42, 91, 93: // replace :\/?*[]continuedefault:r = append(r, v)}if len(r) == 31 {break}}name = string(r)}return name
}
其会剪掉:\/?*[]
这些不会出现在工作表名的字符。
四、GetSheetMap()
func (f *File) GetSheetMap() map[int]string
获取工作簿中以 ID 和名称构成的全部工作表、图表工作表和对话工作表映射表。
下面是一个使用案例。
f, err := excelize.OpenFile("Book1.xlsx")
if err != nil {return
}
for index, name := range f.GetSheetMap() {fmt.Println(index, name)
}
下面直接上源代码:
func (f *File) GetSheetMap() map[int]string {wb := f.workbookReader()sheetMap := map[int]string{}if wb != nil {for _, sheet := range wb.Sheets.Sheet {sheetMap[sheet.SheetID] = sheet.Name}}return sheetMap
}
其会读取工作簿,然后将遍历工作簿中的所有工作表,将工作表对象sheet的ID为键,Name为值放入sheetMap中,最后返回sheetMap即可。
Go-Excelize API源码阅读(二十五)——GetSheetName、GetSheetIndex、GetSheetMap()相关推荐
- Go-Excelize API源码阅读(十九)——SetHeaderFooter
Go-Excelize API源码阅读(十九)--SetHeaderFooter 开源摘星计划(WeOpen Star) 是由腾源会 2022 年推出的全新项目,旨在为开源人提供成长激励,为开源项目提 ...
- 【转】ABP源码分析二十五:EventBus
IEventData/EventData: 封装了EventData信息,触发event的源对象和时间 IEventBus/EventBus: 定义和实现了了一系列注册,注销和触发事件处理函数的方法. ...
- ABP源码分析二十五:EventBus
IEventData/EventData: 封装了EventData信息,触发event的源对象和时间 IEventBus/EventBus: 定义和实现了了一系列注册,注销和触发事件处理函数的方法. ...
- Soul网关源码阅读(十)自定义简单插件编写
Soul网关源码阅读(十)自定义简单插件编写 简介 综合前面所分析的插件处理流程相关知识,此次我们来编写自定义的插件:统计请求在插件链中的经历时长 编写准备 首先我们先探究一下,一个P ...
- Go-Excelize API源码阅读(三十一)——ProtectSheet(sheet string, settings *SheetProtectionOptions)
Go-Excelize API源码阅读(三十一)-- ProtectSheet(sheet string, settings *SheetProtectionOptions) 开源摘星计划(WeOpe ...
- mybatis源码阅读(二):mybatis初始化上
转载自 mybatis源码阅读(二):mybatis初始化上 1.初始化入口 //Mybatis 通过SqlSessionFactory获取SqlSession, 然后才能通过SqlSession与 ...
- Spring Cloud 2.2.2 源码之二十九nacos客户端获取配置原理四
Spring Cloud 2.2.2 源码之二十九nacos客户端获取配置原理四 MetricsHttpAgent的httpGet ServerHttpAgent的httpGet HttpSimple ...
- redis源码剖析(十五)——客户端思维导图整理
redis源码剖析(十五)--客户端执行逻辑结构整理 加载略慢
- LeGo-LOAM激光雷达定位算法源码阅读(二)
文章目录 1.featureAssociation框架 1.1节点代码主体 1.2 FeatureAssociation构造函数 1.3 runFeatureAssociation()主体函数 2.重 ...
- 【转】ABP源码分析二十九:ABP.MongoDb
这个Module通过建立一个MongoDbRepositoryBase<TEntity> 基类,封装了对MongoDb数据库的操作. 这个module通过引用MongoDB.Driver, ...
最新文章
- 错误:ORA-12537: TNS: 连接关闭
- ethereumjs/ethereumjs-util
- sql join on 多表连接_SQL 多表查询-交叉连接(笛卡尔积)
- DataGridView滚动慢的解决方法
- ArcEngine对Blob字段赋值的方法
- (单源最短路径)一文搞懂dijkstra算法
- Spring MVC不要在@Service bean中保存状态
- Max Sum Plus Plus HDU - 1024(动态规划求最大M子段和)
- RequireJS使用注意地方
- javascript对象包含哪些要素_让人迷糊的JavaScript对象(Object一)
- Leetcode算法题(C语言)8--加一
- unity资源面数规范
- vue中如何引入公共样式的的styl文件
- 360度环绕式全景 微软photosynth震撼体验
- 学生成绩表c语言,学生成绩信息表(c语言程序)
- Python-docx 读写 Word 文档:读取正文、表格文本信息、段落格式、字体格式等
- 别被“选择大于努力”骗了!曾经我最成功的事是选了程序员做职业,如今却一败涂地。...
- 校内网API的.net版本XiaoNei.Net 1.0(非官方)
- flash/flex基础发展区别等
- 超详细解析|大厂都在用的设计提效神器 Design Toke