浏览代码

fix:混合表格导出颜色兼容

zqbao 6 月之前
父节点
当前提交
b2aee1cec1
共有 1 个文件被更改,包括 43 次插入13 次删除
  1. 43 13
      services/excel/lucky_sheet.go

+ 43 - 13
services/excel/lucky_sheet.go

@@ -8,6 +8,7 @@ import (
 	"fmt"
 	"os"
 	"reflect"
+	"regexp"
 	"strconv"
 	"strings"
 	"time"
@@ -1427,22 +1428,22 @@ func getExcelizeAlignmentConf(cellInfo LuckySheetDataValue) *excelize.Alignment
 
 // getColor 获取hex颜色
 func getColor(bgStr string) string {
-	if strings.Contains(bgStr, "(") {
-		arr := strings.Split(bgStr, ",")
-		if len(arr) != 3 {
+	isRgb := strings.HasPrefix(bgStr, "rgb")
+	re := regexp.MustCompile(`\(([^)]+)\)`)
+	matches := re.FindStringSubmatch(bgStr)
+	if len(matches) != 2 {
+		return bgStr
+	}
+	if isRgb {
+		arr := strings.Split(matches[1], ",")
+		if len(arr) < 3 {
 			return bgStr
 		}
-
-		// 第一位
-		tmpFirstArr := strings.Split(arr[0], "(")
-		arr[0] = tmpFirstArr[len(tmpFirstArr)-1]
-
-		// 最后一位
-		tmpLastArr := strings.Split(arr[2], ")")
-		arr[2] = tmpLastArr[0]
-
 		rgbArr := make([]int64, 0)
-		for _, v := range arr {
+		for i, v := range arr {
+			if i >= 3 {
+				continue
+			}
 			tmpInt, err := strconv.Atoi(utils.TrimStr(v))
 			if err != nil {
 				return bgStr
@@ -1717,6 +1718,35 @@ func GetTableDataByCustomData(excelType int, data request.TableDataReq, lang str
 	return
 }
 
+func rgbStrToHex(rgbStr string) string {
+	isRgba := strings.HasPrefix(rgbStr, "rgba")
+	re := regexp.MustCompile(`\(([^)]+)\)`)
+	matches := re.FindStringSubmatch(rgbStr)
+	if len(matches) != 2 {
+		return ""
+	}
+	rgbParts := strings.Split(matches[1], ",")
+	var hexColor string
+	// 默认如果不是rgba,则认为是rgb
+	if isRgba {
+		if len(rgbParts) != 4 {
+			return ""
+		}
+		// 暂不处理a通道
+		// a, _ := strconv.ParseFloat(strings.TrimSpace(rgbParts[3]), 64)
+		// a255 := int(a * 255)
+	} else {
+		if len(rgbParts) != 3 {
+			return ""
+		}
+	}
+	r, _ := strconv.Atoi(strings.TrimSpace(rgbParts[0]))
+	g, _ := strconv.Atoi(strings.TrimSpace(rgbParts[1]))
+	b, _ := strconv.Atoi(strings.TrimSpace(rgbParts[2]))
+	hexColor = fmt.Sprintf("#%02x%02x%02x", r, g, b)
+	return hexColor
+}
+
 // GetTableDataByMixedTableData 通过混合表格数据获取表格数据
 func GetTableDataByMixedTableData(config [][]request.MixedTableCellDataReq, hideMerged bool) (selfTableData TableData, err error) {
 	tableDataList := make([][]LuckySheetDataValue, 0)