当前位置:网站首页>Go-Excelize API源码阅读(一)——NewFile()
Go-Excelize API源码阅读(一)——NewFile()
2022-08-05 23:30:00 【InfoQ】
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.Pkg
是
file
结构体的一个成员,定义要填充的电子表格文件结构。
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.Relationships
和
f.Drawings = sync.Map{}
是创建一个并发状况下的Map。
同样的,
Styles
由f.stylesReader()创建,提供了一个函数来获取反序列化后的
xl/styles.xml
文件结构的指针。f.WorkBook也差不多。
VMLDrawing 、DecodeVMLDrawing都是创建map。
接下来是sheet1的相关创建操作。
三、结语
这里是老岳,这是Go语言相关源码的解读第一篇,我会不断努力,给大家带来更多类似的文章,恳请大家不吝赐教。
边栏推荐
猜你喜欢
随机推荐
动态内存管理
上课作业(8)——#631. 字符串匹配问题(strs)
Day119.尚医通:取消预约(微信退款)、就医提醒(定时任务)、
NOKOV度量动作捕捉协助完成无人机室内定位研究
OA项目线程内共享上下文实例(二)
AT2366-[AGC012F]Prefix Median【dp】
工行里的数字员工是怎么来的?
Why can't the expedited fee of 5,000 yuan guarantee the delivery time?
浅析ES6六种声明变量的方法
Is it better to design vias as small as possible?
When using MQ, how to ensure that 100% of messages are not lost?
【TypeScript】什么是字面量类型、类型推断、类型拓宽和类型缩小?
ARC142F
Nanoprobes丨Nanogold 标记条带的凝胶染色
异常处理
在Rocky8中安装VMware Workstation 的方法
Insensitivity and Self-Reconciliation
工程师必看的示波器探头安全使用说明书
C#调用 kernel32.dll
ACL(Access Control List)——访问控制列表