写点什么

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

作者:Regan Yue
  • 2022 年 8 月 06 日
  • 本文字数:991 字

    阅读完需:约 3 分钟

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

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

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

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

Regan Yue

关注

还未添加个人签名 2020.08.12 加入

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

评论

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