You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

76 lines
2.1 KiB
Go

8 months ago
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"
)
8 months ago
func DealExcelImg(filePath string) (err error) {
8 months ago
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, "cdns.fontree.cn") {
suffix = colCell[strings.LastIndex(colCell, "."):]
if strings.Contains(".jpg,.png,.gif,.bmp,.jpeg,", suffix) {
cellNo = fmt.Sprintf("%s%v", columnFullName, lineNo)
// 需要转化图片 ,先下载图片
8 months ago
fullPath, _ := utils.SaveUrlFileDisk(colCell, "./tmp_img", "")
8 months ago
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
}