数据导出为excel

package main

import (
   "time"
   "os"
   "path/filepath"
   "log"
   "strings"
   "github.com/tealeg/xlsx"
)

/*
DataToExcel 数据导出excel
DataToExcel(title string, pathTitle []string, data [][]interface{})
input:
title string 表格名称
pathTitle []string pathTitle[0] 文件输出路径,例:`D:\workspace1\src\hdlg\log`,可为空,为空返回默认文件路径,不能不传
               pathTitle[1,2,3 ...] 文件行首 例: pathTitle[`D:\workspace1\src\hdlg\log`,"col1","col2","col3"]
data [][]interface{} 数据 例: array := [][]interface{}{
                                          []interface{}{
                                             "111",
                                             "1111",
                                             "11111",
                                             "111111",
                                             time.Now().Format("2006/01/02/15/04/05"),
                                          },
                                          []interface{}{
                                             "2222",
                                             "22222",
                                             "222222",
                                             "2222222",
                                             time.Now().Format("2006/01/02/15/04/05"),
                                          }
                                       }
output:
(string, error)
success:
      {
         filePath: C:/Users/Administrator/AppData/Local/Temp/test.xlsx
         err: <nil>
      }
Fail:
      {
         filePath: C:/Users/Administrator/AppData/Local/Temp/test.xlsx
         err: error
      }

*/
func DataToExcel(title string, pathTitle []string, data [][]interface{}) (string, error) {
   var filePath = ""
   var file *xlsx.File
   var sheet *xlsx.Sheet
   var err error
   // 如果有绝对路径存在绝对路径下;没有绝对路径,获取当前绝对路径,存在当前路径下
   dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
   if err != nil {
      log.Println(err)
      return filePath, err
   }
   path := strings.Replace(dir, "\\", "/", -1)
   if pathTitle[0] != "" {
      filePath = pathTitle[0] + `\` + title + `.xlsx`
   } else {
      filePath = path + `/` + title + `.xlsx`
   }
   // 设置样式
   style := xlsx.NewStyle()
   style.Alignment.Horizontal, style.Alignment.Vertical = "Center", "Center"

   // 设置表名
   file = xlsx.NewFile()
   sheet, err = file.AddSheet(title)
   if err != nil {
      log.Println(err)
      return filePath, err
   }
   // 表头
   row := sheet.AddRow()
   row.SetHeightCM(1)
   for j := 1; j < len(pathTitle); j++ {
      cell := row.AddCell()
      cell.Value = pathTitle[j]
      cell.SetStyle(style)
   }
   // 插入数据
   for i := 0; i < len(data); i++ {
      row := sheet.AddRow()
      for j := 0; j < len(data[i]); j++ {
         cell := row.Sheet.Cell(i+1, j)
         switch data[i][j].(type) {
         case float64:
            cell.SetFloat(data[i][j].(float64))
         case time.Time:
            cell.SetDate(data[i][j].(time.Time))
         case int:
            cell.SetInt(data[i][j].(int))
         default:
            cell.SetString(data[i][j].(string))
         }
         cell.SetStyle(style)
      }
   }
   //数据存储路径
   if _, err := os.Stat(filePath); err == nil {
      err = os.Remove(filePath)
      if err != nil {
         log.Println(err)
         return filePath, err
      }
   }
   err = file.Save(filePath)
   if err != nil {
      log.Println(err)
      return filePath, err
   }
   return filePath, nil
}

func main()  {
   array := [][]interface{}{
      []interface{}{
         "111",
         "1111",
         "11111",
         "111111",
         time.Now().Format("2006/01/02/15/04/05"),
      },
      []interface{}{
         "2222",
         "22222",
         "222222",
         "2222222",
         time.Now().Format("2006/01/02/15/04/05"),
      },
   }
   DataToExcel("test",[]string{"./","r1","r2","r3","r4","r5"},array)
}

猜你喜欢

转载自blog.csdn.net/q320036715/article/details/84898929