golang excelize 自动解析 excel 单元格的字体颜色

更新日期: 2024-10-23 阅读次数: 174 字数: 645 分类: golang

遇到一个奇葩的需求,公司内部的一个用来做数据导入的 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 真是早扔早安心。

微信关注我哦 👍

大象工具微信公众号

我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式