package logic import ( "fmt" "github.com/360EntSecGroup-Skylar/excelize" "github.com/exhibition-main/internal/model" "github.com/exhibition-main/pkg/utils" "image" "math" "os" "path/filepath" "strings" ) func DealExcelImg(filePath string) (err error) { f, err := excelize.OpenFile(filePath) filename := filepath.Base(filePath) var cellHeight, cellWidth float64 = 150, 40 //minColumn := int([]byte("A")[0]) // string(rune(i)) rows := f.GetRows("Sheet1") var columnFullName string var lineNo, columnNo int32 var cellNo string for k, row := range rows { lineNo = int32(k + 1) if lineNo != 1 { f.SetRowHeight("Sheet1", int(lineNo), cellHeight) } var firstCell int32 var suffix string var columnName, firstCellName string columnFullName = "" for kk, colCell := range row { cellNo = "" columnNo = int32(int([]byte("A")[0]) + kk%26) columnName = string(columnNo) if kk >= 26 { firstCell = int32(int([]byte("A")[0]) + (int(math.Floor(float64(kk)/float64(26))) - 1)) firstCellName = string(firstCell) } columnFullName = fmt.Sprintf("%s%s", firstCellName, columnName) if strings.Contains(colCell, "cdn.fontree.cn") || strings.Contains(colCell, "test.szjixun.cn") { suffix = colCell[strings.LastIndex(colCell, "."):] if strings.Contains(".jpg,.png,.gif,.bmp,.jpeg,", suffix) { cellNo = fmt.Sprintf("%s%v", columnFullName, lineNo) // 需要转化图片 ,先下载图片 fullPath, _ := utils.SaveUrlFileDisk(colCell, "./tmp_img", "") reader, _ := os.Open(fullPath) defer reader.Close() im, _, _ := image.DecodeConfig(reader) rateX := cellWidth * 2.0 / float64(im.Width) rateY := cellHeight * 1.33 / float64(im.Height) f.SetCellValue("Sheet1", cellNo, "") err = f.AddPicture("Sheet1", cellNo, fullPath, fmt.Sprintf(`{"x_scale": %v, "y_scale": %v, "hyperlink": "%s", "hyperlink_type": "External"}`, rateX, rateY, colCell)) _ = os.Remove(fullPath) if err != nil { return } } } } } f.SetColWidth("Sheet1", "A", columnFullName, cellWidth) if err != nil { fmt.Println(err) } err = f.SaveAs(fmt.Sprintf("%s%s", model.MediaPath, filename)) if err != nil { fmt.Println(err) } return }