go-excelize获取一些单元格背景色不正确的问题

举报
Amrf 发表于 2020/02/19 21:41:30 2020/02/19
【摘要】 excelize地址:https://github.com/360EntSecGroup-Skylar/excelize获取单元格背景色:func getCellBgColor(xlsx *excelize.File, sheet, axix string) string { styleID,err := xlsx.GetCellStyle(sheet, axix) if err !...

excelize地址:

https://github.com/360EntSecGroup-Skylar/excelize

获取单元格背景色:

func getCellBgColor(xlsx *excelize.File, sheet, axix string) string {
   styleID,err := xlsx.GetCellStyle(sheet, axix)
   if err != nil {
      println(err.Error())
      return "000"
   }
   fillID := xlsx.Styles.CellXfs.Xf[styleID].FillID
   fgColor := xlsx.Styles.Fills.Fill[fillID].PatternFill.FgColor
   if fgColor.Theme != nil {
      srgbClr := xlsx.Theme.ThemeElements.ClrScheme.Children[*fgColor.Theme].SrgbClr.Val
      return excelize.ThemeColor(*srgbClr, fgColor.Tint)
   }
   return fgColor.RGB
}

上面的函数获取系统色的时候会返回空串,而可以获取到fgColor.Indexed,所以可以添加补充为

var COLOR_INDEX = []string{
   "FF000000", "FFFFFFFF", "FFFF0000", "FF00FF00", "FF0000FF",
   "FFFFFF00", "FFFF00FF", "FF00FFFF", "FF000000", "FFFFFFFF",
   "FFFF0000", "FF00FF00", "FF0000FF", "FFFFFF00", "FFFF00FF",
   "FF00FFFF", "FF800000", "FF008000", "FF000080", "FF808000",
   "FF800080", "FF008080", "FFC0C0C0", "FF808080", "FF9999FF",
   "FF993366", "FFFFFFCC", "FFCCFFFF", "FF660066", "FFFF8080",
   "FF0066CC", "FFCCCCFF", "FF000080", "FFFF00FF", "FFFFFF00",
   "FF00FFFF", "FF800080", "FF800000", "FF008080", "FF0000FF",
   "FF00CCFF", "FFCCFFFF", "FFCCFFCC", "FFFFFF99", "FF99CCFF",
   "FFFF99CC", "FFCC99FF", "FFFFCC99", "FF3366FF", "FF33CCCC",
   "FF99CC00", "FFFFCC00", "FFFF9900", "FFFF6600", "FF666699",
   "FF969696", "FF003366", "FF339966", "FF003300", "FF333300",
   "FF993300", "FF993366", "FF333399", "FF333333", "System Foreground", "System Background",
}
func getCellBgColor(xlsx *excelize.File, sheet, axix string) string {
   styleID,err := xlsx.GetCellStyle(sheet, axix)
   if err != nil {
      println(err.Error())
      return "000"
   }
   fillID := xlsx.Styles.CellXfs.Xf[styleID].FillID
   fgColor := xlsx.Styles.Fills.Fill[fillID].PatternFill.FgColor
   if fgColor.Theme != nil {
      srgbClr := xlsx.Theme.ThemeElements.ClrScheme.Children[*fgColor.Theme].SrgbClr.Val
      return excelize.ThemeColor(*srgbClr, fgColor.Tint)
   }
   if(fgColor.RGB==""){
      return  COLOR_INDEX[fgColor.Indexed]
   }
   return fgColor.RGB
}

参考:

https://openpyxl.readthedocs.io/en/stable/_modules/openpyxl/styles/colors.html

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。