Go 单表头结构体导入导出

打印 上一主题 下一主题

主题 930|帖子 930|积分 2790

Go 单表头结构体导入导出

首先感谢 github.com/xuri/excelize/v2 基础库对excel表格的支持,本文在此基础上进行功能的api扩展方便,(web/其他)有结构体导出与导入需求的封装优化,当前版本 v0.0.2
基本用法

安装
  1. go get github.com/heliangrui/excel
复制代码
当前版本v0.0.2,也可指定版本安装,以防版本变化
  1. go get github.com/heliangrui/excel@0.0.2
复制代码
结构体标签


  • excelName 列名
  • excelIndex 列序号
  • toExcelFormat 列转excel函数名称
  • toDataFormat excel转data函数名称
  • excelColWidth 列宽度
导出示例


  • 结构体定义
  1. type NameStruct struct{
  2.    Name string `excelName:"姓名" excelIndex:"1" excelColWidth:"30"`
  3.    Age string `excelName:"年龄" excelIndex:"3"`
  4.    Sex int `excelName:"性别" excelIndex:"1" toExcelFormat:"ToExcelSexFormat"`
  5. }
  6. func (n NameStruct) ToExcelSexFormat() string{
  7.     if n.Sex == 0 {
  8.       return "女"
  9.     }
  10.    return "男"
  11. }
复制代码

  • 输出
  1. func main() {
  2.     //创建数据源
  3.    data := createData()
  4.    //创建导出对象
  5.    export := excel.NewExcelExport("test", NameStruct{})
  6.    //销毁对象
  7.    defer export.Close()
  8.    //导出
  9.    err = export.ExportSmallExcelByStruct(data).WriteInFileName("test.xlsx").Error()
  10.    if err != nil {
  11.       fmt.Println("生成失败", err.Error())
  12.    }
  13. }
  14. func createData() []NameStruct {
  15.    var names []NameStruct
  16.    for i := 0; i < 10; i++ {
  17.       names = append(names, NameStruct{name: "hlr" + strconv.Itoa(i), age: strconv.Itoa(i),Sex: i})
  18.    }
  19.    return names
  20. }
复制代码

  • 也可指定输出模拟分页
  1. func main() {
  2.     //创建数据源
  3.    data := createData()
  4.    //创建导出对象
  5.    export := excel.NewExcelExport("test", NameStruct{})
  6.    //销毁对象
  7.    defer export.Close()
  8.    //导出 模拟分页
  9.     for i := 0; i < 10; i++ {
  10.        export.ExportData(result, i*10)
  11.     }
  12.    err = export.WriteInFileName("test.xlsx").Error()
  13.    if err != nil {
  14.       fmt.Println("生成失败", err.Error())
  15.    }
  16. }
复制代码
导入实例


  • 导入数据到结构体
  1. func main() {
  2.     //接受数据
  3.     var result []NameStruct
  4.     //创建导入对象
  5.    importFile := excel.NewExcelImportFile("111.xlsx", NameStruct{})
  6.    //对象销毁
  7.    defer importFile.Close()
  8.    
  9.    //数据填充
  10.    err := importFile.ImportDataToStruct(&result).Error()
  11.     //数据显示
  12.    if err != nil {
  13.       fmt.Println("生成失败", err.Error())
  14.    } else {
  15.       marshal, _ := json.Marshal(result)
  16.       fmt.Println(string(marshal))
  17.    }
  18. }
复制代码

  • 逐行获取数据读取
  1. func main() {
  2.     //接受数据
  3.     var result []NameStruct
  4.     //创建导入对象
  5.    importFile := excel.NewExcelImportFile("111.xlsx", NameStruct{})
  6.    //对象销毁
  7.    defer importFile.Close()
  8.    // 方式二 逐行遍历
  9.    err := importFile.ImportRead(func(row NameStruct) {
  10.       fmt.Println(row.Name)
  11.    }).Error()
  12. }
复制代码
定义表头样式


  • 代码示例
  1. export := excel.NewExcelExport("test", NameStruct{})
  2. //获取默认表头样式
  3. header := excel.CreateDefaultHeader()
  4. //编辑默认header
  5. // .......
  6. export.SetHeadStyle(header)
复制代码

  • 默认样式对象
  1. {
  2.    Border: []excelize.Border{
  3.       {Type: "left", Color: "050505", Style: 1},
  4.       {Type: "top", Color: "050505", Style: 1},
  5.       {Type: "bottom", Color: "050505", Style: 1},
  6.       {Type: "right", Color: "050505", Style: 1},
  7.    },
  8.    Fill: excelize.Fill{Type: "gradient", Color: []string{"#a6a6a6", "#a6a6a6"}, Shading: 1},
  9.    Font: nil,
  10.    Alignment: &excelize.Alignment{
  11.       Horizontal:      "center",
  12.       Indent:          1,
  13.       JustifyLastLine: true,
  14.       ReadingOrder:    0,
  15.       RelativeIndent:  1,
  16.       ShrinkToFit:     false,
  17.       TextRotation:    0,
  18.       Vertical:        "",
  19.       WrapText:        false,
  20.    },
  21.    Protection:    nil,
  22.    NumFmt:        0,
  23.    DecimalPlaces: 0,
  24.    CustomNumFmt:  nil,
  25.    Lang:          "",
  26.    NegRed:        false,
  27. }
复制代码
感谢阅读

后续有时间,将支持多表头

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

汕尾海湾

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表