golang導出excel簡單示例


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
}

導出文件樣式:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM