excelutils.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package excelutils
  2. import (
  3. "fmt"
  4. "git.sxidc.com/go-tools/utils/strutils"
  5. "github.com/xuri/excelize/v2"
  6. "log"
  7. "reflect"
  8. "strconv"
  9. )
  10. func ExportExcel(titleList []string, data []interface{}, sheetName string) (*excelize.File, error) {
  11. f := excelize.NewFile()
  12. defer func() {
  13. err := f.Close()
  14. if err != nil {
  15. log.Println("ExportExcel Close File:", err.Error())
  16. }
  17. }()
  18. err := f.SetSheetName("Sheet1", sheetName)
  19. if err != nil {
  20. return nil, err
  21. }
  22. header := make([]string, 0)
  23. for _, v := range titleList {
  24. header = append(header, v)
  25. }
  26. rowStyleID, _ := f.NewStyle(&excelize.Style{
  27. Font: &excelize.Font{
  28. Family: "arial",
  29. Size: 13,
  30. Color: "#666666",
  31. },
  32. Alignment: &excelize.Alignment{
  33. Horizontal: "center",
  34. Vertical: "center",
  35. },
  36. })
  37. _ = f.SetSheetRow(sheetName, "A1", &header)
  38. _ = f.SetRowHeight(sheetName, 1, 30)
  39. length := len(titleList)
  40. headStyle := strutils.GenerateUpperLetters(length)
  41. var lastRow string
  42. var widthRow string
  43. for k, v := range headStyle {
  44. if k == length-1 {
  45. lastRow = fmt.Sprintf("%s1", v)
  46. widthRow = v
  47. }
  48. }
  49. if err := f.SetColWidth(sheetName, "A", widthRow, 20); err != nil {
  50. return nil, err
  51. }
  52. rowNum := 1
  53. _ = f.SetCellStyle(sheetName, fmt.Sprintf("A%d", 1), fmt.Sprintf("%s", lastRow), rowStyleID)
  54. for _, v := range data {
  55. t := reflect.TypeOf(v)
  56. value := reflect.ValueOf(v)
  57. row := make([]interface{}, 0)
  58. for l := 0; l < t.NumField(); l++ {
  59. val := value.Field(l).Interface()
  60. row = append(row, val)
  61. }
  62. rowNum++
  63. err := f.SetSheetRow(sheetName, "A"+strconv.Itoa(rowNum), &row)
  64. if err != nil {
  65. return nil, err
  66. }
  67. }
  68. return f, nil
  69. }