需求

使用github.com/360EntSecGroup-Skylar/excelize/v2 包,读取excel时没有返回结构体数组,非常不方便,目前网上没有直接转换的包

抽个时间,做了一个简单转换包

也支持 []string[][]string类型,返回结构体或结构体数组

风.foxwho

依赖

引入依赖

go get github.com/liangzibo/go-excel

结构体TAG中 json,index 必须存在

json: 字段名称

index: 索引名称

name: 中文名称

使用案例

案例地址 https://github.com/liangzibo/go-excel

测试结构体

type ExcelTest struct {Name     string    `json:"name" name:"名称" index:"0"`Age      int64     `json:"age" name:"年龄" index:"1"`Score    int64     `json:"score" name:"分数" index:"2"`Birthday time.Time `json:"birthday" name:"生日" index:"4"`
}

excel 读取 出的格式如下

var demoAll = [][]string{{"赵三","30","100","1970-01-01 12:50:01","1980-11-21 15:20:01"},{"赵六","40","30","1970-01-01 12:50:01","1980-11-21 15:20:01"},}

测试

 xlsx, err := excelize.OpenFile("./lzbExcel/excel.xlsx")if err != nil {fmt.Println(err)os.Exit(1)}// Get all the rows in a sheet.rows, err := xlsx.GetRows("Sheet1")if err != nil {fmt.Println(err)os.Exit(1)}//结果在  arr 中var arr []ExcelTesterr = lzbExcel.NewExcelStructDefault().SetPointerStruct(&ExcelTest{}).RowsAllProcess(rows, func(maps map[string]interface{}) error {var ptr ExcelTest// map 转 结构体if err2 := mapstructure.Decode(maps, &ptr); err2 != nil {return err2}arr = append(arr, ptr)return nil})if err != nil {fmt.Println(err)os.Exit(1)}fmt.Println(arr)//结果在  arr 中var arr2 []ExcelTest//StartRow 开始行,索引从 0开始//IndexMax  索引最大行,如果 结构体中的 index 大于配置的,那么使用结构体中的err = lzbExcel.NewExcelStruct(1, 10).SetPointerStruct(&ExcelTest{}).RowsAllProcess(rows, func(maps map[string]interface{}) error {var ptr ExcelTest// map 转 结构体if err2 := mapstructure.Decode(maps, &ptr); err2 != nil {return err2}arr2 = append(arr2, ptr)return nil})if err != nil {fmt.Println(err)os.Exit(1)}fmt.Println(arr2)/var arr3 []ExcelTestexcel := lzbExcel.NewExcelStruct(1, 10).SetPointerStruct(&ExcelTest{})for i, row := range rows {//If the index is less than the set start row, skip//如果 索引 小于 已设置的 开始行,那么跳过if i < excel.StartRow {continue}//单行处理m, err3 := excel.Row(row)if err3 != nil {fmt.Println(err3)}var tmp ExcelTest// map 转 结构体if err2 := mapstructure.Decode(m, &tmp); err2 != nil {fmt.Println(err2)} else {arr3 = append(arr3, tmp)}}fmt.Println("arr3")fmt.Println(arr3)//单行处理var demo = []string{"赵六","40","30","1970-01-01 12:50:01","1980-11-21 15:20:01",}row, err := lzbExcel.NewExcelStructDefault().SetPointerStruct(&ExcelTest{}).Row(demo)if err != nil {fmt.Println(err)os.Exit(1)}fmt.Println(row)var demoStruct ExcelTest// map 转 结构体if err2 := mapstructure.Decode(row, &demoStruct); err2 != nil {fmt.Println(err2)}fmt.Println(demoStruct)

结果

arr
[{张三 30 100 1999-02-01 15:20:31 +0800 CST} {李四 31 99 0001-01-01 00:00:00 +0000 UTC} {王五 33 0 0001-01-01 00:00:00 +0000 UTC}]
arr2
[{张三 30 100 1999-02-01 15:20:31 +0800 CST} {李四 31 99 0001-01-01 00:00:00 +0000 UTC} {王五 33 0 0001-01-01 00:00:00 +0000 UTC}]
arr3
[{张三 30 100 1999-02-01 15:20:31 +0800 CST} {李四 31 99 0001-01-01 00:00:00 +0000 UTC} {王五 33 0 0001-01-01 00:00:00 +0000 UTC}]
map[age:40 birthday:1980-11-21 15:20:01 +0800 CST name:赵六 score:30]
{赵六 40 30 1980-11-21 15:20:01 +0800 CST}

golang 读取Excel 或者map字符型返回结构体数组相关推荐

  1. golang读取excel数据,写入sqlite3

    golang读取excel数据,写入sqlite3 golang读取excel数据,返回一个 []map[string]string 然后读取[]map[string]string,写入到sqlite ...

  2. golang读取excel文件,及时间处理等注意事项

    golang读取excel文件(个人经验) v1,v2版本访问地址 **注:本篇使用的工具包为下列v2版本 github.com/xuri/excelize/v2 之前的 工具包为下列v1版本** g ...

  3. 【C 语言】文件操作 ( 读取文件中的结构体数组 | feof 函数使用注意事项 )

    文章目录 一.读取文件中的结构体数组 | feof 函数使用注意事项 二.代码示例 一.读取文件中的结构体数组 | feof 函数使用注意事项 读取文件结构体时 , 可以循环读取文件中的数据 , 只使 ...

  4. C语言编程>第十二周 ③ 已知学生的记录由学号和学习成绩构成,M名学生的数据已存入a结构体数组中。请编写函数fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数。

    已知学生的记录由学号和学习成绩构成,M名学生的数据已存入a结构体数组中.请编写函数fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分).已给出函数的首部,请完成该函 ...

  5. golang 结构体struct、数组、结构体数组 定义与赋值 、json string转struct

    文章目录 1.结构体struct 1.1 声明结构体 1.2 初始化结构体 以及 传参 2. 结构体数组.append 3. 接口返回 含数组的结构体 常用写法 json string转struct ...

  6. 【HDU】1251统计难题 (字典树:二维数组,结构体数组,链表,map)

    使用二维数组或者结构体数组都可以,但是在计数的时候有一点点小区别 一.结构体数组 #include <cstdio> #include <cstring> #include & ...

  7. C语言中函数如何返回结构体?

    //#include "stdafx.h"//If the vc++6.0, with this line. #include "stdio.h" #inclu ...

  8. C/C++结构体struct 与结构体数组和枚举型enum的结合使用

    C/C++结构体struct 与结构体数组和枚举型enum的结合使用 #include "stdafx.h" #include <string> #include &l ...

  9. 为什么C语言函数不能返回数组,却可以返回结构体?

    C语言函数为什么不能返回数组? 在C语言程序开发中,我们不可以编写下面这样的代码: char f(void)[8] { char ret; // ...fill... return ret; } in ...

  10. C语言试题五十一之已知学生的记录是由学号和学习成绩构成,n名学生的数据已存入s结构体数组中。请编写函数fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分)。

    1. 题目 请编写一个函数void function(Student a[], int n, Student *s),其功能时:已知学生的记录是由学号和学习成绩构成,n名学生的数据已存入s结构体数组中 ...

最新文章

  1. OpenCV 【十八】图像平滑处理/腐蚀与膨胀(Eroding and Dilating)/开闭运算,形态梯度,顶帽,黑帽运算
  2. GPU的发展历程、未来趋势及研制实践
  3. python flask框架发布问答平台注册页面_Python|Flask框架实现QQ账号登录
  4. 音频处理一:(音频基本信息)
  5. 探讨LoadRunner的并发用户和集合点
  6. Taro+react开发(18)--定义变量值
  7. JAVA遇见HTML——JSP篇:JSP内置对象(上)
  8. C语言qsort和C++sort的用法小结和区别比较
  9. SAP GUI 710 PATCH 12 下载地址
  10. ]物体受力分析的方法
  11. ctf gif动图分解帧 提取flag
  12. Windows中的工作组(Work Group)、域(Domain)、域控(DC)、活动目录(AD)介绍
  13. 计算机组成原理cu_计算机组成原理19----控制单元CU设计
  14. 超级详细的 Maven 教程(基础+高级)
  15. 程序猿头头(防抖节流)
  16. 如何用迅捷PDF转换器获取PDF文件中的图片
  17. 恕我直言,Java四大名著并不一定适合你!
  18. 使用长角牛演示:防止ARP协议被攻击原理和配置
  19. 用halcon提取衣服徽章
  20. java 最大子序列和

热门文章

  1. CentOS6.4部署OpenStack Havana(Nova-Network版) (上)
  2. css基础--滤镜特效
  3. 两天来的Java IO Tips
  4. 排序算法--基数排序
  5. 拓端tecdat|R语言优化交易系统:用平行坐标图可视化系统参数优化结果
  6. Linux下监测GPU温度指令
  7. 【C/C++】各种数据类型在16位、32位和64位系统下所占字节差异
  8. oracle怎么查导入导出记录,Oracle实验记录——数据的导入和导出
  9. Ubuntu 16.04 安装QQ, TIM
  10. caffe常用小工具