github.com/tealeg/xlsx/v3 是一个非常流行的 Go 语言库,用于读取和写入 Microsoft Excel .xlsx 文件。它支持 Excel 2007 及更高版本的文件格式,能够帮助你方便地处理 Excel 文件中的工作表、单元格、行列操作等。

1. 安装

在你的 Go 项目中,使用 go get 安装这个库:

go get github.com/tealeg/xlsx/v3

2. 读取 Excel 文件

读取 Excel 文件的内容非常简单。假设我们有一个名为 example.xlsx 的文件,下面是一个读取它并打印其中内容的示例:

package main

import (
	"fmt"
	"log"

	"github.com/tealeg/xlsx/v3"
)

func main() {
	// 打开 Excel 文件
	file, err := xlsx.OpenFile("example.xlsx")
	if err != nil {
		log.Fatalf("打开 Excel 文件失败: %s", err)
	}

	// 遍历所有工作表
	for _, sheet := range file.Sheets {
		fmt.Printf("工作表名: %s\n", sheet.Name)

		// 使用 ForEachRow 遍历行
		err := sheet.ForEachRow(func(row *xlsx.Row) error {
			// 处理行中的每个单元格
			row.ForEachCell(func(cell *xlsx.Cell) error {
				text := cell.String()
				fmt.Printf("%s\t", text)
				return nil
			})
			fmt.Println() // 换行
			return nil
		})

		if err != nil {
			log.Fatalf("遍历工作表行时发生错误: %s", err)
		}
	}
}

3. 写入 Excel 文件

你也可以用 tealeg/xlsx 库创建一个新的 Excel 文件,并向其中写入内容。以下是一个创建 Excel 文件并保存的示例:

package main

import (
    "log"

    "github.com/tealeg/xlsx/v3"
)

func main() {
    // 创建一个新的文件
    file := xlsx.NewFile()

    // 添加一个新的工作表
    sheet, err := file.AddSheet("Sheet1")
    if err != nil {
        log.Fatalf("添加工作表失败: %s", err)
    }

    // 添加行和单元格
    row := sheet.AddRow()
    cell := row.AddCell()
    cell.SetString("Hello, World!")

    // 保存文件
    err = file.Save("newfile.xlsx")
    if err != nil {
        log.Fatalf("保存 Excel 文件失败: %s", err)
    }

    log.Println("Excel 文件创建并保存成功")
}

4. 处理单元格数据类型

除了字符串,你也可以在单元格中处理其他数据类型,例如整数、浮点数、布尔值和日期。

读取不同类型的数据

package main

import (
	"fmt"
	"log"

	"github.com/tealeg/xlsx/v3"
)

func main() {
	// 打开 Excel 文件
	file, err := xlsx.OpenFile("newfile.xlsx")
	if err != nil {
		log.Fatalf("打开 Excel 文件失败: %s", err)
	}

	// 遍历所有工作表
	for _, sheet := range file.Sheets {
		fmt.Printf("工作表名: %s\n", sheet.Name)

		// 使用 ForEachRow 遍历行
		err := sheet.ForEachRow(func(row *xlsx.Row) error {
			// 处理行中的每个单元格
			row.ForEachCell(func(cell *xlsx.Cell) error {
				switch cell.Type() {
				case xlsx.CellTypeString:
					fmt.Println("字符串:", cell.String())
				case xlsx.CellTypeNumeric:
					val, _ := cell.Float()
					fmt.Println("数字:", val)
				case xlsx.CellTypeBool:
					val := cell.Bool()
					fmt.Println("布尔:", val)
				case xlsx.CellTypeDate:
					val, _ := cell.GetTime(false) // 获取日期
					fmt.Println("日期:", val)
				default:
					fmt.Println("其他:", cell.String())
				}
				return nil
			})
			fmt.Println() // 换行
			return nil
		})

		if err != nil {
			log.Fatalf("遍历工作表行时发生错误: %s", err)
		}
	}
}

写入不同类型的数据

package main

import (
    "log"
    "time"

    "github.com/tealeg/xlsx/v3"
)

func main() {
    file := xlsx.NewFile()
    sheet, _ := file.AddSheet("Sheet1")

    // 写入字符串
    row := sheet.AddRow()
    cell := row.AddCell()
    cell.SetString("Go语言")

    // 写入数字
    cell = row.AddCell()
    cell.SetFloat(123.45)

    // 写入布尔值
    cell = row.AddCell()
    cell.SetBool(true)

    // 写入日期
    cell = row.AddCell()
    cell.SetDate(time.Now())

    // 保存文件
    err := file.Save("data_types.xlsx")
    if err != nil {
        log.Fatalf("保存 Excel 文件失败: %s", err)
    }

    log.Println("Excel 文件创建并保存成功")
}

5. 操作样式

xlsx 库允许你对单元格进行简单的样式操作,例如设置字体、边框、对齐方式等。

package main

import (
    "log"

    "github.com/tealeg/xlsx/v3"
)

func main() {
    file := xlsx.NewFile()
    sheet, _ := file.AddSheet("Sheet1")

    row := sheet.AddRow()
    cell := row.AddCell()

    // 设置单元格的字符串
    cell.SetString("加粗文字")

    // 获取样式并设置字体属性
    style := cell.GetStyle()
    style.Font.Bold = true
    style.Font.Size = 12

    // 保存文件
    err := file.Save("styled.xlsx")
    if err != nil {
        log.Fatalf("保存 Excel 文件失败: %s", err)
    }

    log.Println("Excel 文件创建并保存成功")
}

6. 常见问题

  • 内存占用xlsx 库一次性将整个 Excel 文件加载到内存中,对于非常大的文件可能会消耗较多的内存。如果处理大文件,可以考虑按需加载的解决方案。
  • 日期格式:Excel 中的日期常常以浮点数存储,因此你需要特别处理日期格式以正确显示。

孟斯特

声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。

Author: mengbin

blog: mengbin

Github: mengbin92

cnblogs: 恋水无意

腾讯云开发者社区:孟斯特