excel
Go 语言编写的轻量级、零依赖 Excel 解析库 (参考 xlrd 设计)。
专为高性能读取 .xls (Excel 97-2003) 和 .xlsx (Excel 2007+) 文件而设计,提供统一且简洁的 API。
特性
- 零依赖:纯 Go 实现,无 CGO。
- 双格式支持:同时支持旧版二进制
.xls (BIFF8) 和现代 XML .xlsx 格式。
- 轻量高效:专注于数据读取与提取,剔除写入和复杂格式保留功能,速度更快。
- 鲁棒性强:能够处理各种现实场景中的文件,包括对共享字符串和日期的宽松解析。
- 类型安全:提供统一的单元格值接口,自动处理字符串、整数、浮点数、布尔值和日期。
安装
go get github.com/jpzz/excel
使用指南
读取文件
package main
import (
"fmt"
"log"
"github.com/jpzz/excel/xl"
)
func main() {
// 打开任意 .xls 或 .xlsx 文件
wb, err := xl.OpenFile("data.xlsx")
if err != nil {
log.Fatal(err)
}
defer wb.Close()
// 遍历所有工作表 (Sheet)
for _, sheet := range wb.Sheets {
fmt.Printf("工作表: %s\n", sheet.Name)
// 解析工作表数据
if err := sheet.Parse(); err != nil {
log.Printf("解析工作表 %s 失败: %v", sheet.Name, err)
continue
}
// 访问行和单元格
for i, row := range sheet.Rows {
fmt.Printf("第 %d 行: ", i)
for _, cell := range row.Cells {
// 自动识别数据类型 (string, float64, bool, time.Time 等)
fmt.Printf("%v\t", cell.Value)
}
fmt.Println()
}
}
}
数据类型支持
解析器会自动识别并转换单元格内容为相应的 Go 类型:
- 文本:支持共享字符串 (Shared Strings) 和内联字符串。
- 数字:自动处理整数和浮点数。
- 日期:自动转换为
time.Time (支持 1900 和 1904 日期系统)。
- 布尔值:
true / false。
- 错误:保留为错误字符串以便调试。
许可证
本项目采用 MIT 许可证。