返回顶部
首页 > 资讯 > 精选 >Go如何将结构体转换成Excel
  • 883
分享到

Go如何将结构体转换成Excel

2023-07-02 08:07:24 883人浏览 薄情痞子
摘要

今天小编给大家分享一下Go如何将结构体转换成excel的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Excel中的一些概念一

今天小编给大家分享一下Go如何将结构体转换成excel的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

Excel中的一些概念

Go如何将结构体转换成Excel

一个excel文件中可以包含多个sheet,一个sheet可以理解成一个表格

表格的每一行称为 Row

表格的每一行中的任意一个单元格称为 Cell

使用tealeg操作Excel

安装tealeg

go get GitHub.com/tealeg/xlsx

使用tealeg新建一个表格

tealeg提供了傻瓜式api,主要流程为创建一个Sheet,在Sheet中添加Row,然后在Row中添加每个单元格的值,最终持久化到磁盘。

func TestTealeg(t *testing.T) {excel := xlsx.NewFile()// 新建一个sheetsheet, err := excel.AddSheet("Sheet1")if err != nil {t.Fatal(err)}// 创建首行headerRow := sheet.AddRow()// 设置行高headerRow.SetHeightCM(0.5)// 填充行中的单元格headerRow.AddCell().Value = "姓名"headerRow.AddCell().Value = "年龄"valList := [][]string{{"张三", "13"},{"李四", "14"},{"王五", "15"},}for _, line := range valList {row := sheet.AddRow()row.SetHeightCM(0.5)for _, v := range line {row.AddCell().Value = v}}// 持久化到磁盘if err := excel.Save("username.xlsx"); err != nil {t.Fatal(err)}}

执行这个Test用例后,在项目的当前文件夹中会出现一个username.xlsx的表格,内容和前面介绍的excel概念中使用的表格是一个。

Go结合反射将结构体转换成Excel

  • 大概思路是在Go的结构体中每个属性打上一个excel标签

  • 利用反射获取标签中的内容,作为表格的Header

  • 利用反射获取Go结构体中的属性的值,组成一个map,key为从标签中excel反射获取的值,val为结构体属性具体的值,map的伪代码如下:map[excelTag]strucVal 类型为map[string]string

  • 如果一个array或者slice中的结构体需要转换成excel,那么只需要将每个元素转换成第 3 步提到的map作为一行,组成一个[]map[excelTag]strucVal然后遍历这个切片,追加到表格中即可。

反射获取每个Struct中的Tag

func getStructTagList(v interface{}, tag string) []string {var resList []stringif v == nil {return resList}var item interface{}switch reflect.TypeOf(v).Kind() {case reflect.Slice, reflect.Array:values := reflect.ValueOf(v)if values.Len() == 0 {return resList}item = values.Index(0).Interface()case reflect.Struct:item = reflect.ValueOf(v).Interface()default:panic(fmt.Sprintf("type %v not support", reflect.TypeOf(v).Kind()))}typeOf := reflect.TypeOf(item)fieldNum := typeOf.NumField()for i := 0; i < fieldNum; i++ {resList = append(resList, typeOf.Field(i).Tag.Get(tag))}return resList}

通过反射将结构体的值转换成map[excelTag]strucVal

func getTagValMap(v interface{}, tag string) map[string]string {resMap := make(map[string]string)if v == nil {return resMap}typeOf := reflect.TypeOf(v)fieldNum := typeOf.NumField()for i := 0; i < fieldNum; i++ {structField := typeOf.Field(i)tagValue := structField.Tag.Get(tag)val := reflect.ValueOf(v).FieldByName(structField.Name)resMap[tagValue] = fmt.Sprintf("%v", val.Interface())}return resMap}

利用反射将一个Silce,Array或者Struct转换成[]map[excelTag]strucVal

func struct2MapTagList(v interface{}, tag string) []map[string]string {var resList []map[string]stringswitch reflect.TypeOf(v).Kind() {case reflect.Slice, reflect.Array:values := reflect.ValueOf(v)for i := 0; i < values.Len(); i++ {resList = append(resList, getTagValMap(values.Index(i).Interface(), tag))}breakcase reflect.Struct:val := reflect.ValueOf(v).Interface()resList = append(resList, getTagValMap(val, tag))breakdefault:panic(fmt.Sprintf("type %v not support", reflect.TypeOf(v).Kind()))}return resList}

通过tealeg将[]map[excelTag]strucVal转换成Excel

通过上面两步,已经可以将一个结构体,切片或者list转换成了一个[]map[excelTag]strucVal类型的切片,下面我们只需要调用tealeg转换成excel

func Struct2Xlsx(v interface{}) (*xlsx.File, error) {var tag = "excel"tagList := getStructTagList(v, tag)mapTagList := struct2MapTagList(v, tag)excelFile := xlsx.NewFile()sheet, err := excelFile.AddSheet("Sheet1")if err != nil {return nil, err}headerRow := sheet.AddRow()for _, tagVal := range tagList {headerRow.SetHeightCM(0.5)headerRow.AddCell().Value = tagVal}for _, mapTagVal := range mapTagList {row := sheet.AddRow()for _, tagVal := range tagList {row.SetHeightCM(0.5)row.AddCell().Value = mapTagVal[tagVal]}}return excelFile, nil}

运行测试用例验证

type Username struct {Name string `excel:"姓名"`Age  int    `excel:"年龄"`}func TestStruct2Excet(t *testing.T) {var data = []Username{{Name: "张三",Age:  13,},{Name: "李四",Age:  14,},{Name: "王五",Age:  15,},}excel, err := Struct2Xlsx(data)if err != nil {t.Fatal(err)}if err := excel.Save("username.xlsx"); err != nil {t.Fatal(err)}}

测试运行成功后,会在项目目录创建一个username.xlsx的文件,这个文件就是我们的结构体转换成excel的结果

以上就是“Go如何将结构体转换成Excel”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

--结束END--

本文标题: Go如何将结构体转换成Excel

本文链接: https://lsjlt.com/news/340509.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Go如何将结构体转换成Excel
    今天小编给大家分享一下Go如何将结构体转换成Excel的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Excel中的一些概念一...
    99+
    2023-07-02
  • Go结合反射将结构体转换成Excel的过程详解
    目录Excel中的一些概念使用tealeg操作Excel安装tealeg使用tealeg新建一个表格Go结合反射将结构体转换成Excel反射获取每个Struct中的Tag通过反...
    99+
    2022-06-08
    反射 GO 结构体
  • 如何将 TypeScript 接口转换为 Go 结构体?
    php小编新一为您介绍如何将 TypeScript 接口转换为 Go 结构体。当我们在前端使用 TypeScript 开发时,经常会定义接口来描述数据结构。而在后端使用 Go 语言开发...
    99+
    2024-02-09
  • Excel如何将xlsx转换成xls
    要将xlsx文件转换为xls文件,可以按照以下步骤操作:1. 打开Excel软件。2. 在Excel软件中,点击“文件”菜单选项。3...
    99+
    2023-10-18
    Excel
  • 在 Go 中将 Excel 文件数据转换为 JSON 字符串,无需任何结构体定义
    问题内容 我是 go 语言新手。我有一个要求,应用程序将读取 excel 文件并将其转换为 json 字符串,而不依赖于任何定义的结构。我探索了一些库,其中要么需要此结构定义,要么至少...
    99+
    2024-02-06
  • 怎么将html转换成excel
    这篇文章将为大家详细讲解有关怎么将html转换成excel,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。html是什么html的全称为超文本标记语言,它是一种标记语言,包含了一系列标签.通过这些标签可以将...
    99+
    2023-06-14
  • 怎么将dbf转换成excel
    本篇文章为大家展示了怎么将dbf转换成excel,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Visual FoxPro 表文件dbf 转 电子表格文件xls。用FoxPro打开一张表,单击“文件“...
    99+
    2023-06-15
  • 怎么将Excel转换成PDF
    这篇文章主要介绍怎么将Excel转换成PDF,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、打开在线PDF转换平台——pdf365.cn 二、点击“Excel转PDF”图标,进入Excel文档上传页面,将...
    99+
    2023-06-04
  • C#中怎么将结构体转换为数组
    本篇文章给大家分享的是有关C#中怎么将结构体转换为数组,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。(1)解决C#结构体数组间的转化之定义结构体://命名空间 &nb...
    99+
    2023-06-18
  • go语言string转结构体如何实现
    这篇“go语言string转结构体如何实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“go语言string转结构体如何实现...
    99+
    2023-07-05
  • php excel如何转换成pdf
    这篇文章主要介绍“php excel如何转换成pdf”,在日常操作中,相信很多人在php excel如何转换成pdf问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php excel如何转换成pdf”的疑惑有所...
    99+
    2023-06-20
  • Excel表格如何将小数转换成百分数
    这期内容当中小编将会给大家带来有关Excel表格如何将小数转换成百分数,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。上报的数据被退回,说是Excel表格中的小数应该是百分数,表头明明标注了%,不影响使用就...
    99+
    2023-06-05
  • C#如何将Excel转换为PDF
    目录总结转换场景将Excel转换为PDF是一个很常用的功能,常见的转换场景有以下三种:转换整个Excel文档到PDF转换Excel文档的某一个工作表到PDF转换Excel文档的某一个...
    99+
    2023-01-28
    C# Excel C# Excel转换为PDF C# PDF
  • 使用 Python 将点分隔值转换为 Go 结构
    php小编柚子在本文中将介绍如何使用Python将点分隔值(如"key1.subkey1.subkey2")转换为Go语言中的结构体。这个转换过程对于从配置文件或API响应中提取和处理...
    99+
    2024-02-10
    go语言
  • 将结构体字段切片转换为可变参数
    编程网今天将给大家带来《将结构体字段切片转换为可变参数》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议...
    99+
    2024-04-05
  • xlsx如何转换成excel格式
    本篇内容主要讲解“xlsx如何转换成excel格式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“xlsx如何转换成excel格式”吧! xlsx转换成exce...
    99+
    2023-01-03
    xlsx excel
  • dat文件如何转换成excel
    这篇文章主要介绍了dat文件如何转换成excel的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇dat文件如何转换成excel文章都会有所收获,下面我们一起来看看吧。dat文件转换成excel的方法:首先打开ex...
    99+
    2023-07-02
  • 如何将HTML转换成PDF
    HTML转换成PDF:工具、用途、优缺点HTML(Hypertext Markup Language)是一种标记语言,用于创建和排版网页等电子文档。而PDF(Portable Document Format)则是由Adobe公司开发的一种电...
    99+
    2023-05-14
  • 详解Go语言中结构体与JSON间的转换
    目录前言结构体转 JSONJSON 解析结构体小结前言 在日常开发中,我们往往会将 JSON 解析成对应的结构体,反之也会将结构体转成 JSON。接下来本文会通过 JSON 包的两个...
    99+
    2022-12-14
    Go语言 结构体 JSON转换 Go语言 结构体 JSON Go语言结构体 Go语言 JSON
  • mysql如何将表结构导出到excel
    需求如下 导出表的结构,和字段备注信息,表名等。不需要借用第三方工具即可实现。 SELECT TABLE_NAME 表名, COLUMN_NAME 列名, COLUMN_TYPE 数据类型, DA...
    99+
    2022-05-16
    MySQL 表结构导出 MySQL 导出到excel MySQL 表结构导出到excel
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作