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

简介: 开源摘星计划(WeOpen Star) 是由腾源会 2022 年推出的全新项目,旨在为开源人提供成长激励,为开源项目提供成长支持,助力开发者更好地了解开源,更快地跨越鸿沟,参与到开源的具体贡献与实践中。不管你是开源萌新,还是希望更深度参与开源贡献的老兵,跟随“开源摘星计划”开启你的开源之旅,从一篇学习笔记、到一段代码的提交,不断挖掘自己的潜能,最终成长为开源社区的“闪亮之星”。

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

开源摘星计划(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 或更高版本。


#### 二、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语言相关源码的解读第一篇,我会不断努力,给大家带来更多类似的文章,恳请大家不吝赐教。




目录
相关文章
|
3月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
121 2
|
2月前
|
存储 人工智能 API
AgentScope:阿里开源多智能体低代码开发平台,支持一键导出源码、多种模型API和本地模型部署
AgentScope是阿里巴巴集团开源的多智能体开发平台,旨在帮助开发者轻松构建和部署多智能体应用。该平台提供分布式支持,内置多种模型API和本地模型部署选项,支持多模态数据处理。
289 4
AgentScope:阿里开源多智能体低代码开发平台,支持一键导出源码、多种模型API和本地模型部署
|
6月前
|
缓存 前端开发 中间件
[go 面试] 前端请求到后端API的中间件流程解析
[go 面试] 前端请求到后端API的中间件流程解析
|
6月前
|
缓存 弹性计算 API
用 Go 快速开发一个 RESTful API 服务
用 Go 快速开发一个 RESTful API 服务
|
4月前
|
中间件 Go API
使用Go语言构建高性能RESTful API
在现代软件开发中,RESTful API因其简洁和高效而成为构建网络服务的首选。Go语言以其并发处理能力和高性能著称,是开发RESTful API的理想选择。本文将介绍如何使用Go语言构建RESTful API,包括基础的路由设置、中间件的使用、数据验证、错误处理以及性能优化。通过实际代码示例,我们将展示Go语言在API开发中的强大功能和灵活性。
|
4月前
|
存储 数据可视化 JavaScript
可视化集成API接口请求+变量绑定+源码输出
可视化集成API接口请求+变量绑定+源码输出
105 4
|
5月前
|
JSON Go API
使用Go语言和Gin框架构建RESTful API:GET与POST请求示例
使用Go语言和Gin框架构建RESTful API:GET与POST请求示例
|
5月前
|
Go API 开发者
深入探讨:使用Go语言构建高性能RESTful API服务
在本文中,我们将探索Go语言在构建高效、可靠的RESTful API服务中的独特优势。通过实际案例分析,我们将展示Go如何通过其并发模型、简洁的语法和内置的http包,成为现代后端服务开发的有力工具。
|
6月前
|
存储 算法 Java
Go 通过 Map/Filter/ForEach 等流式 API 高效处理数据
Go 通过 Map/Filter/ForEach 等流式 API 高效处理数据
|
6月前
|
JSON API 网络架构
Django 后端架构开发:DRF 高可用API设计与核心源码剖析
Django 后端架构开发:DRF 高可用API设计与核心源码剖析
123 1