当前位置: 首页 > news >正文

Go 语言使用 excelize 库操作 Excel 的方法

在笔者开发的项目中,有操作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 文件将变得更加轻松高效。无论是简单的数据读写,还是复杂的样式设置与公式应用,都能满足实际开发需求。在实际应用中,你还可以根据具体场景进一步探索和使用该库的更多功能。​

相关文章:

  • FastAPI + PyMySQL 报错:“dict can not be used as parameter”的原因及解决方案
  • ​​MQTT​​通讯:​​物联网
  • 【Torch】nn.GRU算法详解
  • Java 类加载机制详解
  • 高级版 Web Worker 封装(含 WorkerPool 调度池 + 超时控制)
  • 渗透测试指南(CSMSF):Windows 与 Linux 系统中的日志与文件痕迹清理
  • 【时时三省】(C语言基础)怎样定义指针变量
  • 无人驾驶汽车运动控制分为纵向控制和横向控制
  • 软件更新 | 从数据到模型,全面升级!TSMaster新版助力汽车研发新突破
  • AIGC工具平台-FishSpeech零样本语音合成
  • 用 GitHub Issues 做任务管理和任务 List,简单好用!
  • 《Redis高并发优化策略与规范清单:从开发到运维的全流程指南》
  • 关于变换矩阵的计算
  • 同源数据互补修复机制:从DNA修复到分布式系统的可靠性设计
  • fiddler+安卓模拟器,解决无网络、抓不到https问题
  • 【Linux网络编程】序列化与反序列化
  • 组件化设计核心:接口与实现分离(C++)
  • JAVA学习-练习试用Java实现“TensorFlow/Deeplearning4j:利用DL4J构建卷积神经网络进行图像分类”
  • ios签名错误的解决办法
  • 百胜软件胜券AI:打造智慧零售运营新范式
  • 渭南房产网站制作/网站建设与维护
  • 服务器网站访问慢/百度百科官网
  • 小区网站建设/百度电脑版网址
  • 网站做的和别人一样违法/济南seo排名优化推广
  • 英文外贸网站建设网站设计方案/关键字挖掘
  • 网站建设小知识/百度关键词搜索推广