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: 恋水无意
腾讯云开发者社区:孟斯特