Golang 生成Excel文件(.xlsx)

LLL_小浪 · · 1546 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

1、导入xlsx直接生成Excel:

go get github.com/tealeg/xlsx

package main

import "github.com/tealeg/xlsx"

func main() {
    file := xlsx.NewFile()
    sheet,err := file.AddSheet("sheet1")
    if err != nil  {
        panic(err)
    }
    row := sheet.AddRow()
    row.SetHeightCM(1) //设置每行的高度
    cell := row.AddCell()
    cell.Value = "haha"
    cell = row.AddCell()
    cell.Value = "1234567"
    err = file.Save("file.xlsx")
    if err != nil {
        panic(err)
    }
}
  • 效果如下:


    image.png
2、简单封装:
package xlsxtool

import (
    "github.com/tealeg/xlsx"
    "errors"
)

type XlsxRow struct {
    Row *xlsx.Row
    Data []string
}

func NewRow(row *xlsx.Row,data []string) *XlsxRow {
    return &XlsxRow{
        Row:row,
        Data:data,
    }
}

func (row *XlsxRow) SetRowTitle() error {
    return generateRow(row.Row,row.Data)
}

func (row *XlsxRow) GenerateRow() error {
    return generateRow(row.Row,row.Data)
}

func generateRow(row *xlsx.Row,rowStr []string) error {
    if rowStr == nil {
        return errors.New("no data to generate xlsx!")
    }
    for _,v := range rowStr {
        cell := row.AddCell()
        cell.SetString(v)
    }
    return nil
}
  • 调用:
package peopleExcel

import (
    "test/mode"
    "test/xlsxtool"
    "fmt"
    "github.com/tealeg/xlsx"
    "time"
)

func GeneratePeopleExcel(peo []mode.Person) (error, bool) {
    t1 := time.Now()
    defer func() {
        fmt.Println(time.Since(t1))
    }()
    t := make([]string, 0)
    t = append(t, "姓名")
    t = append(t, "性别")
    t = append(t, "年龄")
    t = append(t, "电话")
    t = append(t, "婚配")
    t = append(t, "现居地")
    file := xlsx.NewFile()
    sheet, err := file.AddSheet("sheet")
    if err != nil {
        return err, false
    }
    titleRow := sheet.AddRow()
    xlsRow := xlsxtool.NewRow(titleRow, t)
    err = xlsRow.SetRowTitle()
    if err != nil {
        return err, false
    }
    for _, v := range peo {
        currentRow := sheet.AddRow()
        tmp := make([]string, 0)
        tmp = append(tmp, v.Name)
        tmp = append(tmp, v.Gender)
        tmp = append(tmp, v.Age)
        tmp = append(tmp, v.Tel)
        tmp = append(tmp, v.Marry)
        tmp = append(tmp, v.Address)

        xlsRow := xlsxtool.NewRow(currentRow, tmp)
        err := xlsRow.GenerateRow()
        if err != nil {
            return err, false
        }
    }
    err = file.Save("./Excel/人员信息.xlsx")
    if err != nil {
        return err, false
    }
    return nil, true
}
  • 效果如下:


    image.png
  • 写完封装后,我仔细想了想,其实不用封装,可以直接遍历,封装的意义何在?(此处应该有个傻笑的表情 ^ - ^)。


    image.png

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:LLL_小浪

查看原文:Golang 生成Excel文件(.xlsx)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1546 次点击  
加入收藏 微博
1 回复  |  直到 2020-10-12 13:42:00
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传