golang实现读取excel文件并转换为JSON格式

devtools/2025/3/5 2:49:20/

需求

假如有如下表格:
在这里插入图片描述
我希望能够得到如下的JSON数组以供后续使用:

json">[{"create_date": "2025-02-25 06:31:11","id": "26","indicator_value": "0.25","params": "1,4","primary_id": "1","project_id": "1","second_id": "1","status": "0","update_date": "2025-02-25 06:31:11"},{"create_date": "2025-02-25 06:31:18","id": "27","indicator_value": "0.5","params": "1,2","primary_id": "1","project_id": "2","second_id": "1","status": "0","update_date": "2025-02-25 06:31:18"}
]

由于暂时没找到能实现该功能的第三方依赖,所以只能自己写个简单的方法实现此功能

实现

首先安装excelize依赖以便读取excel文件

go get github.com/xuri/excelize/v2

然后创建方法readExcelToJSON

import ("encoding/json""strings""github.com/xuri/excelize/v2"
)// 读取Excel文件并转换为JSON
func readExcelToJSON(filePath, sheetName string) (string, error) {f, err := excelize.OpenFile(filePath)if err != nil {return "", err}rows, err := f.GetRows(sheetName)if err != nil {return "", err}// 提取标题行中每列的名称headers := make([]string, len(rows[0]))for j, col := range rows[0] {headers[j] = strings.TrimSpace(col)}var jsonDataSlice []string// 忽略标题行rows = rows[1:]// 遍历所有行for _, row := range rows {rowData := make(map[string]interface{})// 填充数据到map中,使用列名作为keyfor j, col := range row {header := headers[j]                // 当前列的列名cellValue := strings.TrimSpace(col) // 单元格的值// 不需要转换数据类型rowData[header] = cellValue}jsonData, err := json.Marshal(rowData)if err != nil {return "", err}jsonDataSlice = append(jsonDataSlice, string(jsonData))}// 将结果切片转换为标准格式JSON字符串jsonResult := "[" + strings.Join(jsonDataSlice, ",") + "]"return jsonResult, nil
}

如果需要转换数据类型,可以把rowData[header] = cellValue替换成下面的代码

			if num, err := strconv.Atoi(cellValue); err == nil {rowData[header] = num} else if floatNum, err := strconv.ParseFloat(cellValue, 64); err == nil {rowData[header] = floatNum} else if boolVal, err := strconv.ParseBool(cellValue); err == nil {rowData[header] = boolVal} else {rowData[header] = cellValue}

测试

import ("testing"
)func TestReadExcelRows(t *testing.T) {rows, err := readExcelToJSON("C:\\Users\\ThinkPad\\Desktop\\tproject_input.xlsx", "Result 1")if err != nil {t.Errorf("error = %v", err)return}t.Logf("rows = %v", rows)
}

在这里插入图片描述


http://www.ppmy.cn/devtools/164634.html

相关文章

C#里定义对象序列化保存的例子

C#里定义对象序列化保存的例子 由于很多软件有自定义参数, 不同的时间使用不同的参数, 不同的用户使用不同的参数, 这些参数都需要保存到磁盘,以便软件关闭之后再加载出来。 面对这样的需求,就需要把软件里参数进行序列化保存, 当软件启动时,再把这些参数恢复过来。 下…

openssl的aes128_ECB加密解密运算实例

aes128算法ECB接口 加密接口 注意事项: EVP_EncryptInit_ex初始化算法EVP_aes_128_ecb(),和密钥,key至少16BEVP_EncryptUpdate加密运算,tmplen输出已加密长度EVP_EncryptFinal_ex结束运算,如果在此仍有加密运算&…

gradle libs.versions.toml文件

1.libs.versions.toml介绍2.创建libs.versions.toml文件3.libraries5.versions6.plugins7.bundles 1.libs.versions.toml介绍 下图是官网介绍 意思就是说项目所有插件和库的依赖版本都统一在这个文件配置。 文件中有以下四个部分 versions, 申明要使用的插件和库的版本号的…

机器学习:强化学习的epsilon贪心算法

强化学习(Reinforcement Learning, RL)是一种机器学习方法,旨在通过与环境交互,使智能体(Agent)学习如何采取最优行动,以最大化某种累积奖励。它与监督学习和无监督学习不同,强调试错…

Spring学习笔记03——Spring Boot的文件结构

Spring boot常见的文件结构: src/ ├── main/ │ ├── java/ │ │ └── com.example.demo/ │ │ ├── DemoApplication.java # 主入口 │ │ ├── config/ # 配置类 │ │ ├── controller/ …

【Qt】MVC设计模式

目录 一、搭建MVC框架 二、创建数据库连接单例类SingleDB 三、数据库业务操作类model设计 四、control层,关于model管理类设计 五、view层即为窗口UI类 一、搭建MVC框架 里面的bin、lib、database文件夹以及sqlite3.h与工程后缀为.pro文件的配置与上次发的文章…

R 语言科研绘图第 26 期 --- 密度图-基础

在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…

P7使用pytorch实现马铃薯病害识别

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 我的环境 语言环境:python 3.7.12 编译器:pycharm 深度学习环境:tensorflow 2.7.0 数据:本地数据集 这次我们使…