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

文章目录

    遇到一个奇葩的需求,公司内部的一个用来做数据导入的 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 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式