Go-Excelize API源码阅读(二)——OpenFile()

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

Go-Excelize API源码阅读(二)——OpenFile()

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

二、OpenFile()

使用 OpenFile 可以打开已有 Excel 文档。OpenFile 接收表格文件的名称,并为其返回一个已填充的表格文件结构。例如,打开带有密码保护的电子表格文档:

f, err := excelize.OpenFile("Book1.xlsx", excelize.Options{Password: "password"})
if err != nil {
    return
}

最后需要使用 Close() 关闭已打开的工作簿。

来看一看OpenFile()的源码:

func OpenFile(filename string, opt ...Options) (*File, error) {
    file, err := os.Open(filepath.Clean(filename))
    if err != nil {
        return nil, err
    }
    f, err := OpenReader(file, opt...)
    if err != nil {
        closeErr := file.Close()
        if closeErr == nil {
            return f, err
        }
        return f, closeErr
    }
    f.Path = filename
    return f, file.Close()
}

filepath.Clean(filename)的作用如下:
Clean返回最短的路径名称。它重复应用以下规则,直到不能再做进一步处理。

  1. 用一个Separator元素替换多个Separator元素。
  2. 消除每个 . 路径名称元素(当前目录)。
  3. 消除每个内部的...路径名称元素(父目录)。以及它前面的非...元素。
  4. 消除开始有根路径的.元素:也就是说,假设Separator元素是'/',在一个路径的开头用"/"代替"/."。

根据代码,规则1中的Separator元素如下:

const (
   PathSeparator     = '\\' // OS-specific path separator
   PathListSeparator = ';'  // OS-specific path list separator
)

os.Open的作用是打开指定路径的文件。

OpenReader(file, opt...)的作用是从io.Reader中读取数据流,并返回填充的电子表格文件。

然后将返回的电子表格文件 f 的Path成员赋值为filename。

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

目录
相关文章
|
1月前
|
缓存 前端开发 中间件
[go 面试] 前端请求到后端API的中间件流程解析
[go 面试] 前端请求到后端API的中间件流程解析
|
16天前
|
缓存 弹性计算 API
用 Go 快速开发一个 RESTful API 服务
用 Go 快速开发一个 RESTful API 服务
|
16天前
|
存储 算法 Java
Go 通过 Map/Filter/ForEach 等流式 API 高效处理数据
Go 通过 Map/Filter/ForEach 等流式 API 高效处理数据
|
24天前
|
存储 Linux API
Linux源码阅读笔记08-进程调度API系统调用案例分析
Linux源码阅读笔记08-进程调度API系统调用案例分析
|
24天前
|
Linux API
Linux源码阅读笔记07-进程管理4大常用API函数
Linux源码阅读笔记07-进程管理4大常用API函数
|
30天前
|
JSON 算法 API
京东以图搜图功能API接口调用算法源码python
京东图搜接口是一款强大工具,通过上传图片即可搜索京东平台上的商品。适合电商平台、比价应用及需商品识别服务的场景。使用前需了解接口功能并注册开发者账号获取Key和Secret;准备好图片的Base64编码和AppKey;生成安全签名后,利用HTTP客户端发送POST请求至接口URL;最后解析JSON响应数据以获取商品信息。
|
1月前
|
Go API
Go - 统一定义 API 错误码
Go - 统一定义 API 错误码
40 9
|
1月前
|
测试技术 编译器 Go
依赖注入与控制反转:优化Go语言REST API客户端
依赖注入与控制反转:优化Go语言REST API客户端
|
16天前
|
消息中间件 缓存 API
go-zero微服务实战系列(三、API定义和表结构设计)
go-zero微服务实战系列(三、API定义和表结构设计)
|
17天前
|
JSON API 网络架构
Django 后端架构开发:DRF 高可用API设计与核心源码剖析
Django 后端架构开发:DRF 高可用API设计与核心源码剖析
32 0