excelutils.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package excelutils
  2. import (
  3. "fmt"
  4. "git.sxidc.com/go-tools/utils/strutils"
  5. "github.com/xuri/excelize/v2"
  6. "reflect"
  7. "strconv"
  8. )
  9. func ExportExcel(titleList []string, data []interface{}, sheetName string) (*excelize.File, error) {
  10. f := excelize.NewFile()
  11. f.SetSheetName("Sheet1", sheetName)
  12. header := make([]string, 0)
  13. for _, v := range titleList {
  14. header = append(header, v)
  15. }
  16. rowStyleID, _ := f.NewStyle(`{"font":{"color":"#666666","size":13,"family":"arial"},"alignment":{"vertical":"center","horizontal":"center"}}`)
  17. _ = f.SetSheetRow(sheetName, "A1", &header)
  18. _ = f.SetRowHeight(sheetName, 1, 30)
  19. length := len(titleList)
  20. headStyle := strutils.GenerateUpperLetters(length)
  21. var lastRow string
  22. var widthRow string
  23. for k, v := range headStyle {
  24. if k == length-1 {
  25. lastRow = fmt.Sprintf("%s1", v)
  26. widthRow = v
  27. }
  28. }
  29. if err := f.SetColWidth(sheetName, "A", widthRow, 20); err != nil {
  30. return nil, err
  31. }
  32. rowNum := 1
  33. _ = f.SetCellStyle(sheetName, fmt.Sprintf("A%d", 1), fmt.Sprintf("%s", lastRow), rowStyleID)
  34. for _, v := range data {
  35. t := reflect.TypeOf(v)
  36. value := reflect.ValueOf(v)
  37. row := make([]interface{}, 0)
  38. for l := 0; l < t.NumField(); l++ {
  39. val := value.Field(l).Interface()
  40. row = append(row, val)
  41. }
  42. rowNum++
  43. err := f.SetSheetRow(sheetName, "A"+strconv.Itoa(rowNum), &row)
  44. if err != nil {
  45. return nil, err
  46. }
  47. }
  48. return f, nil
  49. }