golang導出excel使用包
https://github.com/360EntSecGroup-Skylar/excelize
實例代碼如下:
package main import ( "fmt" "strconv" "github.com/360EntSecGroup-Skylar/excelize" ) func main() { // 列標題 titles := []string{ "姓名","年齡", } // 數據源 data := []map[string]interface{}{ map[string]interface{}{"name":"jack","age":18,}, map[string]interface{}{"name":"mary","age":28,}, } f := excelize.NewFile() // Create a new sheet. index := f.NewSheet("Sheet1") for clumnNum,v := range titles { sheetPosition := Div(clumnNum+1)+"1" fmt.Print(sheetPosition) f.SetCellValue("Sheet1", sheetPosition,v) } for lineNum,v := range data { // Set value of a cell. clumnNum := 0 for _,vv := range v{ clumnNum++; sheetPosition := Div(clumnNum)+strconv.Itoa(lineNum+2) switch vv.(type) { case string: f.SetCellValue("Sheet1", sheetPosition,vv.(string)) break case int: f.SetCellValue("Sheet1", sheetPosition,vv.(int)) break case float64: f.SetCellValue("Sheet1", sheetPosition,vv.(float64)) break } } } // Set active sheet of the workbook. f.SetActiveSheet(index) // Save xlsx file by the given path. if err := f.SaveAs("Book2.xlsx"); err != nil { println(err.Error()) } } // Div 數字轉字母 func Div(Num int) string{ var( Str string = "" k int temp []int //保存轉化后每一位數據的值,然后通過索引的方式匹配A-Z ) //用來匹配的字符A-Z Slice := []string{"","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O", "P","Q","R","S","T","U","V","W","X","Y","Z"} if Num >26 { //數據大於26需要進行拆分 for { k = Num % 26 //從個位開始拆分,如果求余為0,說明末尾為26,也就是Z,如果是轉化為26進制數,則末尾是可以為0的,這里必須為A-Z中的一個 if k == 0 { temp = append(temp, 26) k = 26 } else { temp = append(temp, k) } Num = (Num - k) / 26 //減去Num最后一位數的值,因為已經記錄在temp中 if Num <= 26{ //小於等於26直接進行匹配,不需要進行數據拆分 temp = append(temp, Num) break } } }else{ return Slice[Num] } for _,value := range temp{ Str = Slice[value] + Str //因為數據切分后存儲順序是反的,所以Str要放在后面 } return Str }
導出文件樣式: