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()相关推荐

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

    Go-Excelize API源码阅读(十九)--SetHeaderFooter 开源摘星计划(WeOpen Star) 是由腾源会 2022 年推出的全新项目,旨在为开源人提供成长激励,为开源项目提 ...

  2. 【转】ABP源码分析二十五:EventBus

    IEventData/EventData: 封装了EventData信息,触发event的源对象和时间 IEventBus/EventBus: 定义和实现了了一系列注册,注销和触发事件处理函数的方法. ...

  3. ABP源码分析二十五:EventBus

    IEventData/EventData: 封装了EventData信息,触发event的源对象和时间 IEventBus/EventBus: 定义和实现了了一系列注册,注销和触发事件处理函数的方法. ...

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

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

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

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

  6. mybatis源码阅读(二):mybatis初始化上

    转载自  mybatis源码阅读(二):mybatis初始化上 1.初始化入口 //Mybatis 通过SqlSessionFactory获取SqlSession, 然后才能通过SqlSession与 ...

  7. Spring Cloud 2.2.2 源码之二十九nacos客户端获取配置原理四

    Spring Cloud 2.2.2 源码之二十九nacos客户端获取配置原理四 MetricsHttpAgent的httpGet ServerHttpAgent的httpGet HttpSimple ...

  8. redis源码剖析(十五)——客户端思维导图整理

    redis源码剖析(十五)--客户端执行逻辑结构整理 加载略慢

  9. LeGo-LOAM激光雷达定位算法源码阅读(二)

    文章目录 1.featureAssociation框架 1.1节点代码主体 1.2 FeatureAssociation构造函数 1.3 runFeatureAssociation()主体函数 2.重 ...

  10. 【转】ABP源码分析二十九:ABP.MongoDb

    这个Module通过建立一个MongoDbRepositoryBase<TEntity> 基类,封装了对MongoDb数据库的操作. 这个module通过引用MongoDB.Driver, ...

最新文章

  1. 错误:ORA-12537: TNS: 连接关闭
  2. ethereumjs/ethereumjs-util
  3. sql join on 多表连接_SQL 多表查询-交叉连接(笛卡尔积)
  4. DataGridView滚动慢的解决方法
  5. ArcEngine对Blob字段赋值的方法
  6. (单源最短路径)一文搞懂dijkstra算法
  7. Spring MVC不要在@Service bean中保存状态
  8. Max Sum Plus Plus HDU - 1024(动态规划求最大M子段和)
  9. RequireJS使用注意地方
  10. javascript对象包含哪些要素_让人迷糊的JavaScript对象(Object一)
  11. Leetcode算法题(C语言)8--加一
  12. unity资源面数规范
  13. vue中如何引入公共样式的的styl文件
  14. 360度环绕式全景 微软photosynth震撼体验
  15. 学生成绩表c语言,学生成绩信息表(c语言程序)
  16. Python-docx 读写 Word 文档:读取正文、表格文本信息、段落格式、字体格式等
  17. 别被“选择大于努力”骗了!曾经我最成功的事是选了程序员做职业,如今却一败涂地。...
  18. 校内网API的.net版本XiaoNei.Net 1.0(非官方)
  19. flash/flex基础发展区别等
  20. 超详细解析|大厂都在用的设计提效神器 Design Toke

热门文章

  1. 杭电CTF 练习题RE WP
  2. 使用vuex实现一个简单的小应用
  3. nyoj-234-吃土豆(动态规划)
  4. MAC 安装opencv的过程
  5. 传智播客风清扬视频------异常简述
  6. C#简单实现摄影测量后方交会
  7. 明白这些Python 常用包的用法,想不学会Python都难
  8. 机器学习十大经典算法入门
  9. javascript 百度百科
  10. Hulu推荐 | 《破产姐妹》Max演员新剧《娃娃脸》