package service import ( "errors" "github.com/shopspring/decimal" "github.com/xuri/excelize/v2" "strconv" "wms/models" ) func CreateMoreUnit(amount decimal.Decimal, units []models.UnitItems) []models.UnitItems { moreValueArr := make([]models.UnitItems, 0, len(units)) for _, unitItem := range units { if unitItem.Amount.IsZero() { continue } moreValueArr = append(moreValueArr, models.UnitItems{ Amount: amount.Div(unitItem.Amount), Unit: unitItem.Unit, Floating: unitItem.Floating, }) } return moreValueArr } func FillMoreUnitToExcel(amount decimal.Decimal, units []models.UnitItems, startIndex int, column int, f *excelize.File) { columnStr := strconv.Itoa(column) for _, v := range units { switch v.Unit { case "匹": f.SetCellValue("Sheet1", getColumnAlphabet(startIndex)+columnStr, v.Amount.Mul(amount)) case "米": f.SetCellValue("Sheet1", getColumnAlphabet(startIndex+1)+columnStr, v.Amount.Mul(amount)) case "重量": f.SetCellValue("Sheet1", getColumnAlphabet(startIndex+2)+columnStr, v.Amount.Mul(amount)) } } return } func SetExcelHeader(headers []interface{}, f *excelize.File) (err error) { // 设置表头 var i int for _, h := range headers { if v, ok := h.(string); ok { err = f.SetCellValue("Sheet1", getColumnAlphabet(i)+"1", v) if err != nil { return } i++ } else if childHeaders, ok := h.(map[string][]string); ok { for title, list := range childHeaders { err = f.SetCellValue("Sheet1", getColumnAlphabet(i)+"1", title) if err != nil { return err } err = f.MergeCell("Sheet1", getColumnAlphabet(i)+"1", getColumnAlphabet(i-1+len(list))+"1") // 合并单元格 for _, t := range list { err = f.SetCellValue("Sheet1", getColumnAlphabet(i)+"2", t) if err != nil { return err } i++ } } } else { return errors.New("unsupported header value") } } return nil } func SetHeaderStyle(f *excelize.File) (styleInt int, err error) { // 设置表头样式 style := &excelize.Style{ Border: nil, Fill: excelize.Fill{ Type: "pattern", Pattern: 1, Shading: 0, }, Font: &excelize.Font{ Bold: true, }, Alignment: &excelize.Alignment{ Horizontal: "center", }, } return f.NewStyle(style) }