写点什么

Go-Excelize API 源码阅读(一)——NewFile()

作者:Regan Yue
  • 2022 年 8 月 05 日
  • 本文字数:1490 字

    阅读完需:约 5 分钟

Go-Excelize API源码阅读(一)——NewFile()

Go-Excelize API 源码阅读(一)——NewFile()

一、Go-Excelize 简介

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

二、NewFile()

该 API 的功能是利用默认的模板创建新的 Excel 工作薄,新创建的工作簿中会默认包含一个名为 Sheet1 的工作表。


func NewFile() *File {  f := newFile()  f.Pkg.Store("_rels/.rels", []byte(xml.Header+templateRels))  f.Pkg.Store(defaultXMLPathDocPropsApp, []byte(xml.Header+templateDocpropsApp))  f.Pkg.Store(defaultXMLPathDocPropsCore, []byte(xml.Header+templateDocpropsCore))  f.Pkg.Store("xl/_rels/workbook.xml.rels", []byte(xml.Header+templateWorkbookRels))  f.Pkg.Store("xl/theme/theme1.xml", []byte(xml.Header+templateTheme))  f.Pkg.Store("xl/worksheets/sheet1.xml", []byte(xml.Header+templateSheet))  f.Pkg.Store(defaultXMLPathStyles, []byte(xml.Header+templateStyles))  f.Pkg.Store(defaultXMLPathWorkbook, []byte(xml.Header+templateWorkbook))  f.Pkg.Store(defaultXMLPathContentTypes, []byte(xml.Header+templateContentTypes))  f.SheetCount = 1  f.CalcChain = f.calcChainReader()  f.Comments = make(map[string]*xlsxComments)  f.ContentTypes = f.contentTypesReader()  f.Drawings = sync.Map{}  f.Styles = f.stylesReader()  f.DecodeVMLDrawing = make(map[string]*decodeVmlDrawing)  f.VMLDrawing = make(map[string]*vmlDrawing)  f.WorkBook = f.workbookReader()  f.Relationships = sync.Map{}  f.Relationships.Store("xl/_rels/workbook.xml.rels", f.relsReader("xl/_rels/workbook.xml.rels"))  f.sheetMap["Sheet1"] = "xl/worksheets/sheet1.xml"  ws, _ := f.workSheetReader("Sheet1")  f.Sheet.Store("xl/worksheets/sheet1.xml", ws)  f.Theme = f.themeReader()  return f}
复制代码


f.Pkgfile结构体的一个成员,定义要填充的电子表格文件结构。


type File struct {  ...省略其他...  Pkg              sync.Map}
复制代码


func (m *Map) Store(key, value any)是将值存入Map之中。


接下来,SheetCount 是表格的数量。默认是一个 Sheet1,所以初始数量是 1.


CalcChain 是有 calcChainReader()计算的,该函数解析 defaultXMLPathCalcChain 配置中的文件生成一个 xlsxCalcChain 类型的数据,程序中读取的文件地址是 xl/calcChain.xml。xlsxCalcChain 直接映射 calcChain 元素。这个元素代表了计算链的根。


Comments 新建一个map[string]*xlsxComments


ContentTypes 由 contentTypesReader 创建,contentTypesReader 提供了一个函数来获取反序列化后的[Content_Types].xml 文件结构的指针。


f.Relationshipsf.Drawings = sync.Map{}是创建一个并发状况下的 Map。


同样的,Styles由 f.stylesReader()创建,提供了一个函数来获取反序列化后的xl/styles.xml文件结构的指针。f.WorkBook 也差不多。


VMLDrawing 、DecodeVMLDrawing 都是创建 map。


接下来是 sheet1 的相关创建操作。

三、结语

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

发布于: 刚刚阅读数: 3
用户头像

Regan Yue

关注

还未添加个人签名 2020.08.12 加入

对Go、Python、网络安全、区块链感兴趣. · 华为云云享专家 · 掘金资讯创作者

评论

发布
暂无评论
Go-Excelize API源码阅读(一)——NewFile()_Go_Regan Yue_InfoQ写作社区