export.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package excel
  2. import (
  3. "bswas/utilities"
  4. "github.com/360EntSecGroup-Skylar/excelize/v2"
  5. )
  6. const SHEET = "Sheet1"
  7. func CreateFile(row []interface{},list [][]interface{}, mergeRow map[string]string, mergeColumn []string) (excel *excelize.File) {
  8. /* 生成文件 */
  9. file := excelize.NewFile()
  10. streamWriter, err := file.NewStreamWriter(SHEET)
  11. if err != nil {
  12. utilities.WriteLog("/excel/export.go:15 文件生成失败!","ERROR")
  13. }
  14. /* 换行 */
  15. styleID, err := file.NewStyle(&excelize.Style{
  16. Alignment: &excelize.Alignment{
  17. WrapText: true,
  18. },
  19. })
  20. if err != nil {
  21. utilities.WriteLog("/excel/export.go:25 创建换行样式失败!","ERROR")
  22. }
  23. end, _ := excelize.ColumnNumberToName(len(row))
  24. err = file.SetColStyle(SHEET, "A:"+end, styleID)
  25. if err != nil {
  26. utilities.WriteLog("/excel/export.go:30 设置换行格式失败!","ERROR")
  27. return
  28. }
  29. /* 写入表头 */
  30. cell, _ := excelize.CoordinatesToCellName(1, 1)
  31. if err := streamWriter.SetRow(cell, row); err != nil {
  32. utilities.WriteLog("/excel/export.go:37 写入表头失败!","ERROR")
  33. }
  34. /* 流式写入数据 */
  35. for index := 0; index < len(list); index++ {
  36. cell, _ := excelize.CoordinatesToCellName(1, index+2)
  37. if err := streamWriter.SetRow(cell, list[index]); err != nil {
  38. utilities.WriteLog("/excel/export.go:43 数据写入文件失败!","ERROR")
  39. }
  40. }
  41. /* 合并操作 */
  42. if mergeRow != nil && mergeColumn != nil {
  43. for start,end := range mergeRow {
  44. for i := 0;i<len(mergeColumn); i++ {
  45. err := file.MergeCell(SHEET,mergeColumn[i]+start,mergeColumn[i]+end)
  46. if err != nil {
  47. utilities.WriteLog("/excel/export.go:52 合并单元格失败!","ERROR")
  48. return
  49. }
  50. }
  51. }
  52. }
  53. if err := streamWriter.Flush(); err != nil {
  54. utilities.WriteLog("/excel/export.go:60 文件流关闭失败!","ERROR")
  55. }
  56. return file
  57. }