Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库

2023-11-01

在这里插入图片描述

介绍

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

Source Code: https://github.com/xuri/excelize
Issue: github.com/xuri/excelize/issues
go.dev: pkg.go.dev/github.com/xuri/excelize/v2

项目使命
Excelize 的目标是创建并维护一个 Go 语言版本的 Excel 文档 API,以处理符合基于 Office Open XML(OOXML)标准的电子表格文档,借助 Excelize 您可以使用 Go 读取和写入 MS Excel 文件。

为什么要使用 Excelize
在一些情况下我们需要通过程序操作 Excel 文档,例如:打开读取已有 Excel 文档内容、创建新的 Excel 文档、基于已有文档(模版)生成新的 Excel 文档、向 Excel 文档中插入图片、图表和表格等元素,有时还需要跨平台实现这些操作。使用 Excelize 可以方便的满足上述需求。

快速开始

安装

下表列出了各版本 Excelize 基础库对 Go 语言版本最低要求的情况:

Excelize 版本 对 Go 语言版本的最低要求
v2.7.0 1.16
v2.4.0 ~ v2.6.1 1.15
v2.0.2 ~ v2.3.2 1.10
v1.0.0 ~ v2.0.1 1.6

安装命令

go get github.com/xuri/excelize

如果您使用 Go Modules 管理软件包,请使用下面的命令来安装最新版本。

go get github.com/xuri/excelize/v2

更新命令

go get -u github.com/xuri/excelize/v2

创建 Excel 文档

下面是一个创建 Excel 文档的简单例子:

package main

import (
    "fmt"

    "github.com/xuri/excelize/v2"
)

func main() {
    f := excelize.NewFile()
    defer func() {
        if err := f.Close(); err != nil {
            fmt.Println(err)
        }
    }()
    // 创建一个工作表
    index, err := f.NewSheet("Sheet2")
    if err != nil {
        fmt.Println(err)
        return
    }
    // 设置单元格的值
    f.SetCellValue("Sheet2", "A2", "Hello world.")
    f.SetCellValue("Sheet1", "B2", 100)
    // 设置工作簿的默认工作表
    f.SetActiveSheet(index)
    // 根据指定路径保存文件
    if err := f.SaveAs("Book1.xlsx"); err != nil {
        fmt.Println(err)
    }
}

读取 Excel 文档

下面是读取 Excel 文档的例子:

package main

import (
    "fmt"

    "github.com/xuri/excelize/v2"
)

func main() {
    f, err := excelize.OpenFile("Book1.xlsx")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer func() {
        if err := f.Close(); err != nil {
            fmt.Println(err)
        }
    }()
    // 获取工作表中指定单元格的值
    cell, err := f.GetCellValue("Sheet1", "B2")
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(cell)
    // 获取 Sheet1 上所有单元格
    rows, err := f.GetRows("Sheet1")
    if err != nil {
        fmt.Println(err)
        return
    }
    for _, row := range rows {
        for _, colCell := range row {
            fmt.Print(colCell, "\t")
        }
        fmt.Println()
    }
}

在 Excel 文档中创建图表

使用 Excelize 生成图表十分简单,仅需几行代码。您可以根据工作表中的已有数据构建图表,或向工作表中添加数据并创建图表。

在 Excel 文档中创建图表
在这里插入图片描述

package main

import (
    "fmt"

    "github.com/xuri/excelize/v2"
)

func main() {
    f := excelize.NewFile()
    defer func() {
        if err := f.Close(); err != nil {
            fmt.Println(err)
        }
    }()
    for idx, row := range [][]interface{}{
        {nil, "Apple", "Orange", "Pear"}, {"Small", 2, 3, 3},
        {"Normal", 5, 2, 4}, {"Large", 6, 7, 8},
    } {
        cell, err := excelize.CoordinatesToCellName(1, idx+1)
        if err != nil {
            fmt.Println(err)
            return
        }
        f.SetSheetRow("Sheet1", cell, &row)
    }
    if err := f.AddChart("Sheet1", "E1", &excelize.Chart{
        Type: excelize.Col3DClustered,
        Series: []excelize.ChartSeries{
            {
                Name:       "Sheet1!$A$2",
                Categories: "Sheet1!$B$1:$D$1",
                Values:     "Sheet1!$B$2:$D$2",
            },
            {
                Name:       "Sheet1!$A$3",
                Categories: "Sheet1!$B$1:$D$1",
                Values:     "Sheet1!$B$3:$D$3",
            },
            {
                Name:       "Sheet1!$A$4",
                Categories: "Sheet1!$B$1:$D$1",
                Values:     "Sheet1!$B$4:$D$4",
            }},
        Title: excelize.ChartTitle{
            Name: "Fruit 3D Clustered Column Chart",
        },
    }); err != nil {
        fmt.Println(err)
        return
    }
    // 根据指定路径保存文件
    if err := f.SaveAs("Book1.xlsx"); err != nil {
        fmt.Println(err)
    }
}

向 Excel 文档中插入图片

package main

import (
    "fmt"
    _ "image/gif"
    _ "image/jpeg"
    _ "image/png"

    "github.com/xuri/excelize/v2"
)

func main() {
    f, err := excelize.OpenFile("Book1.xlsx")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer func() {
        if err := f.Close(); err != nil {
            fmt.Println(err)
        }
    }()
    // 插入图片
    if err := f.AddPicture("Sheet1", "A2", "image.png", nil); err != nil {
        fmt.Println(err)
        return
    }
    // 在工作表中插入图片,并设置图片的缩放比例
    if err := f.AddPicture("Sheet1", "D2", "image.jpg",
        &excelize.GraphicOptions{ScaleX: 0.5, ScaleY: 0.5}); err != nil {
        fmt.Println(err)
        return
    }
    // 在工作表中插入图片,并设置图片的打印属性
    enable, disable := true, false
    if err := f.AddPicture("Sheet1", "H2", "image.gif",
        &excelize.GraphicOptions{
            PrintObject:     &enable,
            LockAspectRatio: false,
            OffsetX:         15,
            OffsetY:         10,
            Locked:          &disable,
        }); err != nil {
        fmt.Println(err)
        return
    }
    // 保存文件
    if err = f.Save(); err != nil {
        fmt.Println(err)
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库 的相关文章

  • 随着数据的增加自动填充公式并动态排序[重复]

    这个问题在这里已经有答案了 我想对工作表中的数据进行排序 该工作表每天都会在第二个工作表中获取新行 问题是 如果我使用 SMALL 函数并自动填充单元格直到最后一行 A102482 或类似的内容 我的文件会变得非常巨大且滞后 gt 20mb
  • 雅虎财经历史股价动力查询返回301响应

    直到今天我的 Excel 2016 power query 都能够从以下 URL 获取历史股票定价数据https finance yahoo com quote AAL history p AAL https finance yahoo c
  • 使用 Excel Interop 关闭 Excel 应用程序而不保存消息

    我正在使用 Excel Interop COM 对象 我正在编写一种方法 其中打开和关闭 Excel 应用程序 然后打开 Excel 工作簿和工作表 完成这些工作后 我将关闭应用程序和工作簿 我的问题是 此方法可以重复调用多次 当工作表和应
  • 删除 Excel 表格中的所有数据行(第一行除外)

    就在最近 我一直在尝试删除表中的所有数据行 除了第一个数据行 需要清除 一些正在执行的表可能已经没有行 所以我运行它时遇到问题 因为使用 DataBodyRange Rows Count在没有行 只有页眉和 或页脚 的表上会导致错误 我到处
  • Excel动态数组运行重复项计数

    我一直在重新设计一些旧的电子表格工具 以便使用 Excel 的较新工具来过滤和格式化动态数据输出动态数组公式 https support microsoft com en us office dynamic array formulas a
  • 使用 VBA 从数据透视表中提取数据

    我编写了以下 vba 代码 该代码应该从 old xlsx 的某些单元格导入任何现有数据 这些单元格是数据透视表的一部分 并且 OE gt location gt qual in 作为其行的子单元格 该列由手动输入的日期决定 strForm
  • 我可以使用 VBA 将密码“传递”到 Excel 中的外部数据库连接吗?

    我正在尝试使用 VBA 隐藏我在 Excel 工作表中设置的数据连接的密码 由于 Excel 以纯文本形式存储外部数据源的密码 因此我想让 VBA 调用表的刷新并提供密码 我录制了刷新表格并输入密码的宏 但令我沮丧的是 它似乎省略了密码部分
  • 如何将多个 Excel 工作表转换为 csv python

    我想转换所有的excel文档 xls 将工作表转换为 csv 如果 excel 文档只有一张工作表 那么我将进行如下转换 wb open workbook path1 sh wb sheet by name Sheet1 csv file
  • xlwt 可以在单元格中创建一个包含标题和链接变量的超链接吗?

    例如 如何更改以下行 使 test 为变量 T 且 http google com http google com 是变量L ws write 0 0 xlwt Formula test HYPERLINK http google com
  • 如何从另一个 Excel 实例引用工作簿

    我相信我的问题相当简单 我有一个工作簿 我正在使用它从另一个软件 SAP 获取一些数据 当我从软件导出数据时 它会自动打开一个 xlsx 文件 然后我需要做的是从该文件复制一些数据 粘贴到我的原始工作簿上 然后关闭该文件 我的代码中给我带来
  • 关闭工作簿时删除范围,xls vba

    我想要范围 Range A2 G z 关闭工作簿时删除 有人可以帮我处理代码吗 谢谢 凯 这就是我尝试过的 Option Explicit Sub Makro1 insert clipboard Workbooks Pfl SchutzSt
  • 导入到 SQL Server 时忽略 Excel 文件中的列

    我有多个具有相同格式的 Excel 文件 我需要将它们导入 SQL Server 我当前遇到的问题是 有两个文本列我需要完全忽略 因为它们是自由文本 并且某些行的字符长度超出了服务器允许我导入的长度 这会导致截断错误 因为我的分析不需要这些
  • 强制刷新工作表的“最后一个”单元格

    Pressing Ctrl End in Excel takes you to the bottom right most cell of the worksheet 如果删除最后的行或列并保存工作簿 最后一个单元格以及滚动条都会更新 我记
  • 当存储在集合中时,如何更改类属性的值

    我想将一个类存储在集合中 并且能够更改该类的属性 而不必删除集合项并再次将其添加回来 我的研究表明 如果不进行删除 替换操作 则无法更改项目本身 但是项目的属性又如何呢 下面的代码展示了如何执行此操作 当您运行宏时 调试窗口将显示存储对象的
  • Excel ISNUMBER 函数与 IF 语句

    我有一个正在使用的 Excel 文件 有一个列包含数字和文本 有时只是其中之一 我正在尝试编写一个函数来扫描单元格的最左侧部分以查看它是否以数字开头 我以为我拥有它 但显然没有 这就是我所拥有的 IF ISNUMBER LEFT E8 1
  • Excel,多个 IF AND 更高效的公式

    我正在制作一个电子表格 如下所示 Index Diff Exc Sym Sec Result Criteria Met 3 42 2 07 0 86 0 92 1 83 1 95 0 38 2 93 0 87 0 23 2 01 0 09
  • 查找最后一列并按最后一列排序

    我需要 Excel 来检测我拥有的最后一列并对该列进行排序 我有一个宏 每次使用它时都会生成一个新列 因此我无法使用常量 Sub sortyness Dim sortdata A1 Cells LastRow LastColumn As R
  • 用于导出到 CSV/Excel 的数据 URI(无服务器端请求):浏览器支持/限制?

    以下问题 Javascript 或 Flash 导出至 CSV Excel https stackoverflow com questions 8150516 javascript or flash export to csv excel
  • 如何锁定特定单元格但允许过滤和排序

    我使用以下代码来锁定某些单元格的内容 Sub LockCell ws As Worksheet strCellRng As String With ws Unprotect Cells Locked False Range strCellR
  • 将 CSV 导入 Excel - 自动“文本到列”和“插入表格”

    我想在 Excel 2010 上打开 CSV 逗号分隔 文件并自动将文本转换为列 然后选择所有活动单元格并插入带标题的表格 是否可以在我的功能区中添加一个按钮来为我完成这一切 我经常使用不同大小的 CSV 文件 我发现每次手动执行此操作有点

随机推荐

  • 【react练习】受控组件和非受控组件、获取form表单信息、阻止事件默认行为

    同样整理自尚硅谷的视频 视频链接 https www bilibili com video av51174155 from search seid 11218837597275325699 另 想投转载来着 可原文链接怎么也填不对 需求 自
  • pip与conda指定版本安装的使用区别

    1 pip安装 pip install keras 2 1 1 即可安装指定的2 1 1版本的keras 2 conda安装 conda install keras 2 1 2 注意两者的区别在于等号的数量 pip有两个等号 conda用一
  • nodejs 基于token的身份验证

    nodejs 基于token的身份验证 最近接到一个需求 要求实现免密登陆 就是基于token实现的 于是就研究了下基于token验证身份的流程 传统基于服务器的验证方式 传统的验证方式是基于服务器的 就是把登陆信息存在服务端 每次登陆需要
  • Error Connecting to Substrate Front-End Template when connecting remotely远程连接时连接到 Substrate 前端模板时出错

    我正在这里尝试本教程中的基板安装和构建链 https substrate dev docs en tutorials create your first substrate chain interact 我在节点模板上做了cargo bui
  • springboot 报错处理(长期更新 2023.8.11)

    目录 一 HTTP 相关 1 1 数据传输方面 1 1 1 HttpMessageNotWritableException 1 1 1 1 springboot stomp 场景 1 1 2 org springframework mess
  • 论文笔记:Deep Learning [nature review by Lecun, Bengio, & Hinton]

    如今 机器学习的技术在我们的生活中扮演着越来越重要的角色 从搜索引擎到推荐系统 从图像识别到语音识别 而这些应用都开始逐渐使用一类叫做深度学习 Deep Learning 的技术 传统机器学习算法的局限性在于 它们往往很难处理那些未被加工过
  • Linux:入门学习知识及常见指令

    文章目录 入门介绍 操作系统的概念 Linux机器的使用 Linux上的指令 对文件知识的补充 文件的定义和一些含义 文件和目录的存储 绝对路径和相对路径 ls指令 pwd指令 cd指令 touch指令 mkdir指令 rmdir指令 rm
  • 嵌套循环以及break和continue

    嵌套循环试验 打印九九表 row 1 line 1 while row lt 9 line 1 while line lt row print f line row row line end line 1 print row 1 break
  • USB2.0协议分析

    前言 为了方便查看博客 特意申请了一个公众号 附上二维码 有兴趣的朋友可以关注 和我一起讨论学习 一起享受技术 一起成长 一 USB硬件介绍 1 1 概述 一条USB传输线分别由地线 电源线 D 和D 四条线构成 D 和D 是差分输入线 它
  • C ++ 数组

    目录 寻找最大 最小值 数组 寻找最大 最小值 对于这个编程测验 我们将找到用户将输入的15个数字的最小值和最大值以及平均值 include
  • FISCO BCOS Python SDK控制台使用

    控制台 常用命令 deploy 部署合约 console py deploy contract name save 参数包括 contract name 合约名 需要先放到contracts目录 save 若设置了save参数 表明会将合约
  • 如何优雅的搞定自动化测试的文件上传?

    在做web自动化时会碰到文件上传的实现功能 这个时候我们应当如何使用selenium进行文件的上传呢 一 标签类型为input 直接selenium直接上传 我们在做selenium自动化时 必须要面临的就是页面元素的定位 如果该上传文件功
  • 【车载以太网测试从入门到精通】——SOMEI/IP服务接口自动化测试(含CAPL源码)

    系列文章目录 车载以太网测试从入门到精通 系列文章目录汇总 文章目录 系列文章目录 前言 一 SOME IP介绍 1 SOME IP与车载以太网协议栈关系 2 SOME IP主要功能 3 SOME IP远程进程调用 RPC 二 SOME I
  • kvm在虚拟服务器,江博士带你轻松搞定KVM虚拟化

    阅读 3 609 在虚拟化中 必然存在宿主机与虚拟机通信的需要 一般来说 可以通过网桥的方式与虚拟机建立通信通道 通过网络传输数据 适用性比较强 但是 这种方式依赖于网络通畅 当虚拟机发生某些故障 网络已经发生问题 宿主机就需要另外一种方式
  • Java 多线程 --- 线程同步 显式锁ReentrantLock

    Java 多线程 线程同步 显式锁ReentrantLock 和 AQS机制 显式锁 Lock接口 显性锁的实现原理 AQS机制 显式锁 Lock接口 显式锁是自 JDK 1 5 开始引人的排他锁 作为一种线程同步机制 其作用与内部锁相 同
  • react与vue的区别

    React和Vue js是两个流行的JavaScript库 框架 用于构建用户界面 以下是React和Vue之间的一些主要区别 学习曲线 Vue js对于新手来说比React更容易学习和上手 构建方式 React强调组件的可重用性 而Vue
  • libevent HTTPserver/ libcurl HTTPClient构建

    22 1 前言 最近由于项目需要实现http客户端与http服务器 要求是httpServer httpClient模块独立 不能与用户代码耦合一起 因此为了使得httpserver及httpclient的通用性 在软件框架搭建中httpS
  • 利用SQLmap进行一次SQL注入

    题目 ctf show 题目博客很久之前已经做过一次了 很简单 这次只是用它来记录一下sqlmap如何使用 首先进入题目 是一个登录界面 猜测是sql注入 打开SQLmap 查询网站是否存在注入 burp抓包 将http头部文件复制到sql
  • python学习笔记十——模块与函数

    第五章 模块与函数 5 1 python程序的结构 函数 类 gt 模块 模块 模块 gt 包 函数 类 模块 包 Python python的程序由包 package 模块 module 和函数组成 模块是处理某一类问题的集合 模块由函数
  • Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库

    介绍 Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库 基于 ECMA 376 ISO IEC 29500 国际标准 可以使用它来读取 写入由 Microsoft Excel 2007 及以上版本创建的电