Excelize Go语言操作 Office Excel文档基础库
Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Microsoft Excel™ 2007 及以上版本创建的电子表格文档。支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多种文档格式,高度兼容带有样式、图片(表)、透视表、切片器等复杂组件的文档,并提供流式读写 API,用于处理包含大规模数据的工作簿。可应用于各类报表平台、云计算、边缘计算等系统。使用本类库要求使用的 Go 语言为 1.16 或更高版本。
- Source Code: github.com/xuri/excelize
- Issue: github.com/xuri/excelize/issues
- go.dev: pkg.go.dev/github.com/xuri/excelize/v2
- 许可协议: BSD 3-Clause
- 当前版本: v2.7.1
- 文档更新: 2023年7月20日
介绍 · Excelize 简体字文档
使用最新版本 Excelize 要求您使用的 Go 语言为 1.16 或更高版本。
- 安装命令
go get github.com/xuri/excelize
- 如果您使用 Go Modules 管理软件包,请使用下面的命令来安装最新版本。
go get github.com/xuri/excelize/v2
创建 Excel 文档
下面是一个创建 Excel 文档的简单例子:
package mainimport ("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 mainimport ("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 生成图表十分简单,仅需几行代码。您可以根据工作表中的已有数据构建图表,或向工作表中添加数据并创建图表。
package mainimport ("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 mainimport ("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, falseif 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)}
}
相关文章:

Excelize Go语言操作 Office Excel文档基础库
Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Microsoft Excel™ 2007 及以上版本创建的电子表格文档。支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多种文档格式…...

SpringBoot、Java 使用 Jsoup 解析 HTML 页面
使用 Jsoup 解析 HTML 页面 什么是 Jsoup? Jsoup 是一个用于处理 HTML 页面的 Java 库,它提供了简单的 API,使得从 HTML 中提取数据变得非常容易。无论是获取特定标签的内容还是遍历整个页面的元素,Jsoup 都能轻松胜任。 如何使…...
C# 随心记
#region 批量保存到数据库 public bool InsertDB(DataTable dt) { bool bResult true; LogInfo.WriteTextToFile("使用Bulk插入的实现方式"); Stopwatch sw new Stopwatch(); using (SqlConnecti…...
华为OD机试-字符串分割
题目描述 给定一个非空字符串S,其被N个‘-’分隔成N1的子串,给定正整数K,要求除第一个子串外,其余的子串每K个字符组成新的子串,并用‘-’分隔。对于新组成的每一个子串,如果它含有的小写字母比大写字母多…...

element-ui的el-dialog,简单的封装。
el-dialog是使用率很高的组件 使用el-dialog很多都是按照文档的例子,用一个变量控制是否显示,再来一个变量控制标题。 如果我这个对话框多个地方使用的话还要创建多个变量,甚至关闭之后还要清空一些变量,应该可以简化一点。我写…...

SpringBoot引入外部jar打包失败解决,SpringBoot手动引入jar打包war后报错问题
前言 使用外部手动添加的jar到项目,打包时出现jar找不到问题解决 处理 例如项目结构如下 引入方式换成这种 <!-- 除了一下这两种引入外部jar,还是可以将外部jar包添加到maven中(百度查)--><!-- pdf转word --><…...
HTTP基础:学习HTTP协议的基本知识,了解请求和响应的过程
HTTP(Hypertext Transfer Protocol,超文本传输协议)是一种用于传输超媒体文档(如HTML)的应用层协议,它是Web中最基本的协议。 HTTP请求和响应都是由客户端和服务器之间进行的。 一个完整的HTTP请求由以下几…...
Spark基础-任务提交相关参数
整理一下用过的spark相关的参数 spark应用提交命令spark-submit的常用参数(使用spark-submit --help可以查看所有参数, 有一些参数在下面的spark配置属性定义了,也没有额外列出) 参数默认值含义--master local[*]spark集群的mast…...

ROS-PyQt小案例
前言:目前还在学习ROS无人机框架中,,, 更多更新文章详见我的个人博客主页【前往】 ROS与PyQt5结合的小demo,用于学习如何设计一个界面,并与ROS中的Service和Topic结合,从而控制多个小乌龟的运动…...

【算法】双指针——leetcode盛最多水的容器、剑指Offer57和为s的两个数字
盛水最多的容器 (1)暴力解法 算法思路:我们枚举出所有的容器大小,取最大值即可。 容器容积的计算方式: 设两指针 i , j ,分别指向水槽板的最左端以及最右端,此时容器的宽度为 j - i 。由于容器…...

idea 使用debug 启动项目的时候 出现 Method breakpoints may dramatically slow down debugging
问题: 1. 写了一段时间的代码,在debug启动项目后提示:Method breakpoints may dramatically slow down debugging 但是正常启动是可以的,debug不行。 2. idea 里面的项目,很多地方都有断点,现在想要取消全部的断点…...

Tomcat的一些配置问题(server.xml/catalina.sh)
在同一机器中运行多个Tomcat时,如果不修改server.xml的端口参数,会出现端口冲突使得Tomcat异常;Tomcat默认配置中,JAVA_OPTS不会设置太大,一般需要在catalina.sh中增加一行配置来加大该参数值。 目录 1.Server.xml配置…...

飞天使-jenkins进行远程linux机器修改某个文件的思路
文章目录 jenkins配置的方式jenkins中执行shell的思路 jenkins配置的方式 jenkins中执行shell的思路 下面的脚本别照抄,只是一个思路 ipall"$ips"# 将文本参数按行输出为变量 while IFS read -r line; doecho "$line" if [[ ! -z $line ]] &…...

Revit SDK 介绍:PanelSchedule 配电盘明细表
前言 这个例子介绍 Revit 的配电盘明细表,PanelSchedule。Revit 的电器专业在国内用的并不是十分广泛,但从功能上来说还是比较完整的。 内容 这个例子里有三个命令: PanelScheduleExport - 导出配电盘明细表InstanceViewCreation - 创建配…...
Java后端实现不用pagehelper。手写分页如何实现?
Java后端实现不用pagehelper。手写分页如何实现? 如果你不使用PageHelper这样的分页插件,你可以手动实现分页逻辑。下面是一个使用Java后端手写分页的示例: 首先,确定每页显示的数据量和当前页码。 int pageSize 10; // 每页显示的数据量…...
spring 缓存
1.spring缓存注解,可以丢在controller,也可以丢在service,也可以丢在mapper。 2.手动操作缓存使用: Autowiredprivate CacheManager cacheManager;3.添加缓存 //添加缓存 Override Cacheable(cacheNames "test", key…...

vue3.0 element-plus 不同版本 el-popover 循环优化
表格内循环el-popover 渲染以后的页面,数据量很大的时候页面会卡,生成的代码: 解决思路:将el-popover提出来,不参与循环,让el-popover只渲染一次 1、以1.1.0-beta.24版为例(低版本)…...

计算机网络实验4:HTTP、DNS协议分析
文章目录 1. 主要教学内容2. HTTP协议3. HTTP分析实验【实验目的】【实验原理】【实验内容】【实验思考】 4. HTTP分析实验可能遇到的问题4.1 捕捉不到http报文4.2 百度是使用HTTPS协议进行传输4.3 Wireshark获得数据太多如何筛选4.4 http报文字段含义不清楚General(…...

敏捷项目管理如何做好Sprint Backlog?迭代管理
什么是Sprint Backlog? Sprint Backlog是Scrum的主要工件之一。在Scrum中,团队按照迭代的方式工作,每个迭代称为一个Sprint。在Sprint开始之前,PO会准备好产品Backlog,准备好的产品Backlog应该是经过梳理、估算和优先…...

实验三 图像分割与描述
一、实验目的: (1)进一步掌握图像处理工具Matlab,熟悉基于Matlab的图像处理函数。 (2)掌握图像分割方法,熟悉常用图像描述方法。 二、实验原理 1.肤色检测 肤色是人类皮肤重要特征之一ÿ…...

利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...

三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...