利用 excelize 工具包即可完成 xlsx 文件的读写,示例代码如下。

写 xlsx

import (
	"fmt"
	"github.com/360EntSecGroup-Skylar/excelize"
	"github.com/smartystreets/goconvey/convey"
	"strconv"
	"testing"
)
func TestGolangExcel(t *testing.T) {
	convey.Convey("TestGolangExcel", t, func() {
		// 打开一个xlsx文件
		f, _ := excelize.OpenFile("book.xlsx")
		index := f.GetActiveSheetIndex() // 获得默认工作簿的索引
		// 创建一个新的工作簿,如果Sheet工作簿已存在则不需要这行
		//index := f.NewSheet("Sheet1")
		// 设置单元格的值
		f.SetCellValue("Sheet1", "A1", "计划ID")

		for i := 1; i <= 1000; i++ {
			// A2~A1001这1000个单元格都填充写入"你好"
			f.SetCellValue("Sheet1", "A" + strconv.Itoa(i+1), "你好")
			// 每循环10次保存一次,这样不至于因为循环中某次失败导致所有数据都丢失
			if i % 10 == 0 {
				if err := f.SaveAs("book.xlsx"); err != nil {
					fmt.println(err.Error())
				}
			}
		}
		// 设置工作簿的默认工作表
		f.SetActiveSheet(index)
		// 根据指定路径保存文件
		if err := f.SaveAs("book.xlsx"); err != nil {
			fmt.println(err.Error())
		}
	})
}

读 xlsx

package main
 
import (
    "fmt"
 
    "github.com/360EntSecGroup-Skylar/excelize"
)
 
func main() {
    f, err := excelize.OpenFile("Book1.xlsx")
    if err != nil {
        fmt.Println(err)
        return
    }
    // Get value from cell by given worksheet name and axis.
    cell, err := f.GetCellValue("Sheet1", "B2")
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(cell)
    // Get all the rows in the Sheet1.
    rows, err := f.GetRows("Sheet1")
    for _, row := range rows {
        for _, colCell := range row {
            fmt.Print(colCell, "\t")
        }
        fmt.Println()
    }
}