在 Go 中操作 Excel 文件,最常用的库是 excelize,它支持读取、写入和修改 Excel 文件。

1. 安装 excelize

首先,你需要安装 excelize 库:

go get /xuri/excelize/v2

2. 示例:创建并写入 Excel 文件

以下是一个简单的示例,展示了如何使用 excelize 创建一个 Excel 文件,并写入一些数据:

package main

import (
	"fmt"
	"/xuri/excelize/v2"

)

func main() {
	// 创建一个新的 Excel 文件
	f := excelize.NewFile()

	// 创建一个新的工作表,默认的工作表是 Sheet1
	sheet := "Sheet1"

	// 写入数据
	f.SetCellValue(sheet, "A1", "Hello")  // 在 A1 单元格写入 "Hello"
	f.SetCellValue(sheet, "B1", "World")  // 在 B1 单元格写入 "World"
	f.SetCellValue(sheet, "A2", "GoLang") // 在 A2 单元格写入 "GoLang"
	f.SetCellValue(sheet, "B2", "Excel")  // 在 B2 单元格写入 "Excel"

	// 保存文件到本地
	if err := f.SaveAs("example.xlsx"); err != nil {
		fmt.Println("Error saving file:", err)
		return
	}

	fmt.Println("Excel file created successfully")
}

3. 示例:读取 Excel 文件

下面是如何读取已存在的 Excel 文件并打印内容的示例:

package main

import (
	"fmt"
	"/xuri/excelize/v2"
)

func main() {
	// 打开现有的 Excel 文件
	f, err := excelize.OpenFile("example.xlsx")
	if err != nil {
		fmt.Println("Error opening file:", err)
		return
	}

	// 获取指定工作表的所有行数据
	sheet := "Sheet1"
	rows, err := f.GetRows(sheet)
	if err != nil {
		fmt.Println("Error reading rows:", err)
		return
	}

	// 遍历并打印所有行
	for i, row := range rows {
		fmt.Printf("Row %d: %v\n", i+1, row)
	}
}

4. 示例:更新单元格值

以下是如何在一个现有 Excel 文件中更新某个单元格值的示例:

package main

import (
	"fmt"
	"/xuri/excelize/v2"
)

func main() {
	// 打开现有的 Excel 文件
	f, err := excelize.OpenFile("example.xlsx")
	if err != nil {
		fmt.Println("Error opening file:", err)
		return
	}

	// 更新单元格 A1 的内容
	if err := f.SetCellValue("Sheet1", "A1", "Updated Value"); err != nil {
		fmt.Println("Error setting cell value:", err)
		return
	}

	// 保存文件
	if err := f.Save(); err != nil {
		fmt.Println("Error saving file:", err)
		return
	}

	fmt.Println("Excel file updated successfully")
}

5. 示例:读取单元格值

如何读取 Excel 文件中某个单元格的值:

package main

import (
	"fmt"
	"/xuri/excelize/v2"
)

func main() {
	// 打开现有的 Excel 文件
	f, err := excelize.OpenFile("example.xlsx")
	if err != nil {
		fmt.Println("Error opening file:", err)
		return
	}

	// 读取单元格 A1 的值
	cellValue, err := f.GetCellValue("Sheet1", "A1")
	if err != nil {
		fmt.Println("Error getting cell value:", err)
		return
	}

	fmt.Printf("The value of A1 is: %s\n", cellValue)
}

6. 示例:添加新工作表

如果你想在现有 Excel 文件中添加一个新的工作表,可以使用 NewSheet 方法:

package main

import (
	"fmt"
	"/xuri/excelize/v2"
)

func main() {
	// 创建一个新的 Excel 文件
	f := excelize.NewFile()

	// 创建新的工作表
	index := f.NewSheet("NewSheet")

	// 写入数据到新工作表
	f.SetCellValue("NewSheet", "A1", "This is a new sheet")

	// 设置 "Sheet1" 为默认工作表
	f.SetActiveSheet(index)

	// 保存文件
	if err := f.SaveAs("example_with_new_sheet.xlsx"); err != nil {
		fmt.Println("Error saving file:", err)
		return
	}

	fmt.Println("Excel file with new sheet created successfully")
}

7. 其他常用操作

  • 删除工作表f.DeleteSheet("SheetName")
  • 合并单元格f.MergeCell("Sheet1", "A1", "B2")
  • 设置单元格样式:通过 excelize.NewStyle 创建样式,使用 f.SetCellStyle 应用到单元格。