在笔者开发的项目中,有操作excel的需要,由于go操作excel比较方便且功能强大,于是选择使用go来操作excel。github.com/360EntSecGroup-Skylar/excelize库是一个功能强大且易于使用的库,它支持创建、读取和修改 Excel 文件,兼容多种 Excel 版本格式。接下来,将详细介绍如何使用该库进行 Excel 文件的读写操作。​

一、安装 excelize 库​

使用go get命令安装excelize库,在终端中执行以下命令:​

go get github.com/360EntSecGroup-Skylar/excelize​

安装完成后,在 Go 代码中导入该库:​

import (​"github.com/360EntSecGroup-Skylar/excelize"​)​

二、创建并写入 Excel 文件​

1. 基本写入操作​

下面的示例代码展示了如何使用excelize库创建一个新的 Excel 文件,并向其中写入数据:​

package mainimport ("github.com/360EntSecGroup-Skylar/excelize"
)func main() {// 创建一个新的Excel文件f := excelize.NewFile()// 创建一个新的工作表index := f.NewSheet("Sheet1")// 设置单元格的值f.SetCellValue("Sheet1", "A1", "姓名")f.SetCellValue("Sheet1", "B1", "年龄")f.SetCellValue("Sheet1", "A2", "小明")f.SetCellValue("Sheet1", "B2", 20)// 设置默认工作表f.SetActiveSheet(index)// 保存文件if err := f.SaveAs("example.xlsx"); err != nil {println(err.Error())}
}

在上述代码中:​

  • 首先通过excelize.NewFile()创建一个新的 Excel 文件对象。​
  • 接着使用NewSheet方法创建名为 “Sheet1” 的工作表,并获取其索引。​
  • 然后通过SetCellValue方法设置指定单元格的值,参数依次为工作表名称、单元格坐标和要设置的值。​
  • 再使用SetActiveSheet方法将创建的工作表设置为默认工作表。​
  • 最后调用SaveAs方法将文件保存到指定路径。​

2. 批量写入数据​

如果需要批量写入数据,可以使用循环结合SetCellValue方法实现。例如,将一个切片中的数据写入 Excel:​

package mainimport ("github.com/360EntSecGroup-Skylar/excelize"
)func main() {f := excelize.NewFile()index := f.NewSheet("Sheet1")data := [][]interface{}{{"姓名", "年龄"},{"小红", 22},{"小刚", 23},}for rowIndex, rowData := range data {for colIndex, cellData := range rowData {cell, err := excelize.CoordinatesToCellName(colIndex+1, rowIndex+1)if err != nil {println(err.Error())return}f.SetCellValue("Sheet1", cell, cellData)}}f.SetActiveSheet(index)if err := f.SaveAs("batch_example.xlsx"); err != nil {println(err.Error())}
}

这里先定义了一个二维切片存储数据,通过两层循环遍历切片,使用CoordinatesToCellName方法将行列索引转换为单元格坐标,再设置单元格值。​

三、读取 Excel 文件​

1. 读取指定单元格数据​

以下示例展示了如何读取 Excel 文件中指定单元格的数据:​

package mainimport ("fmt""github.com/360EntSecGroup-Skylar/excelize"
)func main() {f, err := excelize.OpenFile("example.xlsx")if err != nil {fmt.Println(err.Error())return}defer f.Close()// 获取Sheet1工作表中A1单元格的值cell, err := f.GetCellValue("Sheet1", "A1")if err != nil {fmt.Println(err.Error())return}fmt.Println(cell)
}

代码中,先使用OpenFile方法打开 Excel 文件,成功打开后,通过GetCellValue方法获取指定工作表和单元格的内容,最后记得关闭文件。​

2. 遍历读取工作表数据​

若要遍历读取整个工作表的数据,可以通过循环实现:​

package mainimport ("fmt""github.com/360EntSecGroup-Skylar/excelize"
)func main() {f, err := excelize.OpenFile("example.xlsx")if err != nil {fmt.Println(err.Error())return}defer f.Close()// 获取Sheet1工作表sheet := "Sheet1"rows, err := f.GetRows(sheet)if err != nil {fmt.Println(err.Error())return}for _, row := range rows {for _, cell := range row {fmt.Printf("%s\t", cell)}fmt.Println()}
}

上述代码使用GetRows方法获取指定工作表的所有行数据,返回一个二维字符串切片,通过两层循环遍历切片,打印出每个单元格的值。​

四、设置单元格样式​

excelize库还支持设置单元格样式,如字体、颜色、对齐方式等。以下是一个设置单元格字体加粗、背景色为黄色的示例:​

package mainimport ("github.com/360EntSecGroup-Skylar/excelize"
)func main() {f := excelize.NewFile()index := f.NewSheet("Sheet1")f.SetCellValue("Sheet1", "A1", "标题")// 创建样式style, err := f.NewStyle(`{"font":{"bold":true},"fill":{"type":"pattern","color":["#FFFF00"],"pattern":1}}`)if err != nil {println(err.Error())return}// 应用样式到单元格if err := f.SetCellStyle("Sheet1", "A1", "A1", style); err != nil {println(err.Error())return}f.SetActiveSheet(index)if err := f.SaveAs("style_example.xlsx"); err != nil {println(err.Error())}
}

在这个例子中,先通过NewStyle方法创建一个样式对象,传入 JSON 格式的样式配置,定义字体加粗和背景色。然后使用SetCellStyle方法将样式应用到指定的单元格区域。​

五、使用公式​

excelize库支持在 Excel 文件中使用公式。例如,在单元格中设置求和公式:​

package mainimport ("github.com/360EntSecGroup-Skylar/excelize"
)func main() {f := excelize.NewFile()index := f.NewSheet("Sheet1")f.SetCellValue("Sheet1", "A1", 10)f.SetCellValue("Sheet1", "A2", 20)// 设置公式f.SetCellFormula("Sheet1", "A3", "SUM(A1:A2)")f.SetActiveSheet(index)if err := f.SaveAs("formula_example.xlsx"); err != nil {println(err.Error())}
}

通过SetCellFormula方法,指定工作表、单元格和公式内容,即可在 Excel 文件中使用公式进行计算。​

掌握excelize库的这些用法,在 Go 语言中处理 Excel 文件将变得更加轻松高效。无论是简单的数据读写,还是复杂的样式设置与公式应用,都能满足实际开发需求。在实际应用中,你还可以根据具体场景进一步探索和使用该库的更多功能。​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/910470.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/910470.shtml
英文地址,请注明出处:http://en.pswp.cn/news/910470.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java基础(三):逻辑运算符详解

Java基础系列文章 Java基础(一):发展史、技术体系与JDK环境配置详解 Java基础(二):八种基本数据类型详解 Java基础(三):逻辑运算符详解 目录 一、什么是逻辑运算符?二、基础逻辑运算符(3种)1、&&…

Bugku-CTF-web

最近刷了一下 Bugku-CTF-web 的61-70题(平台目前只有67),好难好难,全都是知识的盲区。各种代码审计,各种反序列化,各种反弹shell,各种模版注入,各种字符串绕过,可以说是W…

GitLab 工具如何提升我的工作效率

在当今快节奏的软件开发和技术创作领域,作为一名博主,高效的工作流程和强大的协作工具至关重要。GitLab 作为一款集成了版本控制、项目管理、持续集成与持续部署(CI/CD)等功能于一体的平台,为我的工作带来了巨大的便利…

Unity Addressable使用之服务器远程加载

本地模拟服务器加载 1、创建一个Profiles,将Remote设为Editor Hosted 2、在Addressables Group窗口将Profile设为Local Test 3、将某个Asset Groups设为Remote加载 4、Build资源 5、打开本地模拟服务器 Addressables Hosting 窗口是 Addressable 提供的一个内置本…

Java基础八股文 - 面试者心理历程与标准答案

Java基础八股文 - 面试者心理历程与标准答案 前言:如何应对Java基础面试问题 面试Java基础时,很多候选人会因为紧张而忘记平时熟悉的知识点。本文将从面试者的心理历程出发,教你如何在面试中用自己的思路组织答案,然后给出标准回…

学习笔记088——Windows配置Tomcat自启

1、下载 下载Windows版本tomcat。本文下载的版本是: apache-tomcat-9.0.31-windows-x64.zip 点击下载 注意:要确保bin目录下有 service.bat 文件! 2、配置服务 解压后,终端进入bin⽬录,安装服务:service…

SSL证书怎么配置到服务器上 ?

在网络安全备受关注的当下,SSL证书已成为网站安全的标配。但仅有SSL证书还不够,正确将其配置到服务器上,才能真正发挥保障数据传输安全、验证网站身份的作用。由于服务器类型多样,不同服务器的SSL证书配置方法存在差异&#xff0c…

AI与SEO关键词协同进化

内容概要 人工智能(AI)与搜索引擎优化(SEO)的结合,正深刻变革着关键词策略的制定与执行方式。本文旨在探讨AI技术如何驱动SEO关键词领域的智能化进化,核心在于利用AI强大的数据处理与模式识别能力&#xf…

01.线性代数是如何将复杂的数据结构转化为可计算的数学问题,这个过程是如何进行的

将复杂数据结构转化为可计算的数学问题是数据科学、机器学习和算法设计中的核心环节。这一过程需要结合数据特性、数学理论和计算框架,通过系统化的抽象和建模实现。以下是具体转化流程及关键技术解析: 一、数据结构分析:解构原始数据的本质特征 1. 识别数据类型与结构特性…

华为OD机考-网上商城优惠活动-模拟(JAVA 2025B卷)

import java.util.Scanner;public class Test3 {static int mjq;static int dzq;static int wmkq;static class Group {int price;// 打折后价格int num;// 优惠券使用熟练}public static void main(String[] args) {Scanner scanner new Scanner(System.in);String input sc…

JavaScript 数据处理 - 将字符串按指定位数截断并放入数组(基础实现、使用正则表达式实现、使用正则表达式简化实现)

将字符串按指定位数截断并放入数组 1、基础实现 /*** 将字符串按指定位数截断并放入数组* param {string} str - 要处理的字符串* param {number} n - 每段截断的位数* returns {Array} 截断后的字符串数组*/ function splitStringByLength(str, n) {const result [];for (l…

python学智能算法(十四)|机器学习朴素贝叶斯方法进阶-CountVectorizer文本处理简单测试

【1】引用 前序学习文章中,已经对拉普拉斯平滑和简单二元分类进行了初步探索,相关文章链接为: python学智能算法(十二)|机器学习朴素贝叶斯方法初步-拉普拉斯平滑计算条件概率-CSDN博客 python学智能算法&#xff0…

Java枚举类的规范设计与常见错误规避

前言 在Java开发中,枚举(enum)是一种强大的工具,用于定义一组固定常量集合。然而,许多开发者在使用枚举时容易陷入设计误区,导致代码可维护性差、运行时错误频发,甚至引发生产事故。 一、枚举…

Vue指令v-if

目录 一、Vue中的v-if指令是什么?二、v-if指令的使用 一、Vue中的v-if指令是什么? v-if指令是根据表达值的真假,切换元素的显示和隐藏, 本质是通过操纵dom元素来切换显示状态。 注意: 表达式的值为true,元…

探秘阿里云云数据库Tair:性能、特性与应用全景解析

引言 在数字化浪潮席卷全球的当下,数据已然成为企业最为关键的资产之一,如何高效管理和运用这些数据,成为了企业在激烈竞争中脱颖而出的关键。云数据库作为现代数据管理的核心工具,凭借其卓越的可扩展性、灵活性以及高效的数据处…

百度大模型免费上线,学AI大模型就选近屿智能

3月16日,文心大模型4.5和文心大模型X1正式发布!目前两款模型已免费对用户开放。 文心大模型4.5是百度自主研发的新一代原生多模态基础大模型,通过多个模态联合建模实现协同优化,提高多模态理解能力,精进语言能力&#…

PostgreSQL 中实现跨库连接主要有两种解决方案

方法一:使用 dblink 扩展 dblink 是 PostgreSQL 的内置扩展,允许在一个数据库会话中执行远程 SQL 查询。 步骤 1:在源数据库中启用 dblink 扩展 CREATE EXTENSION IF NOT EXISTS dblink;步骤 2:执行跨库查询 -- 简单查询示例&…

Qt中的布局

Qt6.8的布局管理系统,用于自动排列部件:水平布局QHBoxLayout、垂直布局QVBoxLayout、网格布局QGridLayout、表单布局QFormLayout 布局(layout)是一种优雅而灵活的方式,可以在其容器内自动排列子部件(child widgets)。每个部件通过sizeHint和s…

Agent成本降低46%:缓存规划器的思路模板

论文标题 Cost-Efficient Serving of LLM Agents via Test-Time Plan Caching 论文地址 https://arxiv.org/pdf/2506.14852 作者背景 斯坦福大学 动机 大模型能力的飞速进步催收了大量 AI 智能体应用,它们协调多种模型、工具、工作流来解决实际复杂任务。然而…

Vue 3 + Axios 完整入门实战指南

从入门到深入,手把手教你在 Vue 3 中正确使用 Axios,支持全局挂载、局部分离、使用 proxy 连接场景,适合所有前端小白和实战设计。 大家好,我是石小石!一个热爱技术分享的开源社区贡献者,小册《油猴脚本实战…