golang 读取Excel 或者map字符型返回结构体数组
需求
使用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字符型返回结构体数组相关推荐
- golang读取excel数据,写入sqlite3
golang读取excel数据,写入sqlite3 golang读取excel数据,返回一个 []map[string]string 然后读取[]map[string]string,写入到sqlite ...
- golang读取excel文件,及时间处理等注意事项
golang读取excel文件(个人经验) v1,v2版本访问地址 **注:本篇使用的工具包为下列v2版本 github.com/xuri/excelize/v2 之前的 工具包为下列v1版本** g ...
- 【C 语言】文件操作 ( 读取文件中的结构体数组 | feof 函数使用注意事项 )
文章目录 一.读取文件中的结构体数组 | feof 函数使用注意事项 二.代码示例 一.读取文件中的结构体数组 | feof 函数使用注意事项 读取文件结构体时 , 可以循环读取文件中的数据 , 只使 ...
- C语言编程>第十二周 ③ 已知学生的记录由学号和学习成绩构成,M名学生的数据已存入a结构体数组中。请编写函数fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数。
已知学生的记录由学号和学习成绩构成,M名学生的数据已存入a结构体数组中.请编写函数fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分).已给出函数的首部,请完成该函 ...
- golang 结构体struct、数组、结构体数组 定义与赋值 、json string转struct
文章目录 1.结构体struct 1.1 声明结构体 1.2 初始化结构体 以及 传参 2. 结构体数组.append 3. 接口返回 含数组的结构体 常用写法 json string转struct ...
- 【HDU】1251统计难题 (字典树:二维数组,结构体数组,链表,map)
使用二维数组或者结构体数组都可以,但是在计数的时候有一点点小区别 一.结构体数组 #include <cstdio> #include <cstring> #include & ...
- C语言中函数如何返回结构体?
//#include "stdafx.h"//If the vc++6.0, with this line. #include "stdio.h" #inclu ...
- C/C++结构体struct 与结构体数组和枚举型enum的结合使用
C/C++结构体struct 与结构体数组和枚举型enum的结合使用 #include "stdafx.h" #include <string> #include &l ...
- 为什么C语言函数不能返回数组,却可以返回结构体?
C语言函数为什么不能返回数组? 在C语言程序开发中,我们不可以编写下面这样的代码: char f(void)[8] { char ret; // ...fill... return ret; } in ...
- C语言试题五十一之已知学生的记录是由学号和学习成绩构成,n名学生的数据已存入s结构体数组中。请编写函数fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分)。
1. 题目 请编写一个函数void function(Student a[], int n, Student *s),其功能时:已知学生的记录是由学号和学习成绩构成,n名学生的数据已存入s结构体数组中 ...
最新文章
- OpenCV 【十八】图像平滑处理/腐蚀与膨胀(Eroding and Dilating)/开闭运算,形态梯度,顶帽,黑帽运算
- GPU的发展历程、未来趋势及研制实践
- python flask框架发布问答平台注册页面_Python|Flask框架实现QQ账号登录
- 音频处理一:(音频基本信息)
- 探讨LoadRunner的并发用户和集合点
- Taro+react开发(18)--定义变量值
- JAVA遇见HTML——JSP篇:JSP内置对象(上)
- C语言qsort和C++sort的用法小结和区别比较
- SAP GUI 710 PATCH 12 下载地址
- ]物体受力分析的方法
- ctf gif动图分解帧 提取flag
- Windows中的工作组(Work Group)、域(Domain)、域控(DC)、活动目录(AD)介绍
- 计算机组成原理cu_计算机组成原理19----控制单元CU设计
- 超级详细的 Maven 教程(基础+高级)
- 程序猿头头(防抖节流)
- 如何用迅捷PDF转换器获取PDF文件中的图片
- 恕我直言,Java四大名著并不一定适合你!
- 使用长角牛演示:防止ARP协议被攻击原理和配置
- 用halcon提取衣服徽章
- java 最大子序列和
热门文章
- CentOS6.4部署OpenStack Havana(Nova-Network版) (上)
- css基础--滤镜特效
- 两天来的Java IO Tips
- 排序算法--基数排序
- 拓端tecdat|R语言优化交易系统:用平行坐标图可视化系统参数优化结果
- Linux下监测GPU温度指令
- 【C/C++】各种数据类型在16位、32位和64位系统下所占字节差异
- oracle怎么查导入导出记录,Oracle实验记录——数据的导入和导出
- Ubuntu 16.04 安装QQ, TIM
- caffe常用小工具