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

发布于:2025-06-24 ⋅ 阅读:(21) ⋅ 点赞:(0)

在笔者开发的项目中,有操作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 main

import (
    "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 main

import (
    "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 main

import (
    "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 main

import (
    "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 main

import (
    "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 main

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


网站公告

今日签到

点亮在社区的每一天
去签到