遇到一个奇葩的需求,公司内部的一个用来做数据导入的 Excel 表, 通过客户名称的字体颜色来表示是否是大客户。 而我的后台接口必须要解析出这个客户是否是大客户。(┬_┬) 最近被 excel 数据解析折磨疯了。
所以问题就变成了,使用 golang excelize 库,如何获取 excel 中某个单元格的 font color。
网上的资料,以及官方的资料都提到了如何设置单元格的颜色,但是极少有人分享如何读取单元格的字体颜色。 而 reddit 上的一个讨论甚至推荐换个库。。。
不得已,直接跪求 GPT-4o,果然立马解决。Google / Bing 搜索了半天,没有找到一个相关的资料,传统搜索真的不太行了。
golang 代码
package main
import (
"fmt"
"log"
"github.com/xuri/excelize/v2"
)
func main() {
// 打开 Excel 文件
f, err := excelize.OpenFile("your-file.xlsx")
if err != nil {
log.Fatal(err)
}
// 指定要读取的单元格
cell := "A1"
// 获取单元格样式
styleID, err := f.GetCellStyle("Sheet1", cell)
if err != nil {
log.Fatal(err)
}
// 获取样式详细信息
style, err := f.GetStyle(styleID)
if err != nil {
log.Fatal(err)
}
// 打印字体颜色(RGB)
if style.Font != nil {
fmt.Printf("Font color in cell %s: %s\n", cell, style.Font.Color)
} else {
fmt.Println("No font style found.")
}
}
输出的 Color 是个字符串,例如:
- 0066CC
- FFFFFF
- 000000
如果单元格没有设置颜色,则默认是个空字符串。
升级 xuri/excelize/v2 版本
我发现,我使用的 excelize 2.4.1 版本并没有 GetStyle 这个函数。 从 github issue 中的讨论看,也是最近几个版本才加上的。所以升级吧:
> go get github.com/xuri/excelize/v2@latest
go: downloading github.com/xuri/excelize/v2 v2.9.0
升级 golang 版本 1.23
但是重新编译,又遇到了错误:
> go build
# golang.org/x/crypto/sha3
/home/sunzhongwei.com/golang/pkg/mod/golang.org/x/crypto@v0.28.0/sha3/xor.go:25:10: undefined: subtle.XORBytes
note: module requires Go 1.20
X, 我的开发环境 golang 版本还是 1.18 😭,终于有机会升级了,干脆一步到位直接升级最新的 1.23.2. 参考 golang 版本升级的方法。
升级完之后,就可以编译成功了。
> go version
go version go1.23.2 linux/amd64
gorm 的奇葩问题
不知道是 golang 升级的问题,还是 gorm 的问题。升级之后,发现 gorm 的 Count 函数不能结合 Preload 使用了。 最无法接受的是,Count 函数直接不执行,还不报任何错误,修改了写法之后,才能正常运行。(还是得升级 gorm 版本) gorm 真是早扔早安心。
参考:升级到 golang 1.23 版本后,gorm 的 count 统计总是返回 0
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式