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

 更新时间:2025年03月04日 09:38:06   作者:ppo_wu  
本文介绍了如何使用Golang读取Excel文件并将其转换为JSON格式,通过安装excelize依赖和创建readExcelToJSON方法,可以实现这一功能,如果需要转换数据类型,可以修改相应的代码,需要的朋友可以参考下

需求

假如有如下表格:

在这里插入图片描述

我希望能够得到如下的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中,使用列名作为key
		for 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)
}

在这里插入图片描述

到此这篇关于Golang实现读取excel文件并转换为JSON格式的文章就介绍到这了,更多相关Golang读取excel并转为JSON格式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Go语言中的结构体的特性

    详解Go语言中的结构体的特性

    结构体是Go语言中重要且灵活的概念之一,本文旨在深入介绍Go语言中的结构体,揭示其重要性和灵活性,并向读者展示结构体支持的众多特性,需要的可以参考一下
    2023-06-06
  • golang生成vcf通讯录格式文件详情

    golang生成vcf通讯录格式文件详情

    这篇文章主要介绍了golang生成vcf通讯录格式文件详情,​VCF是通讯录格式文件,一般需要用手机通讯录导入导出的文件格式都是vcf格式。​下面详细内容介绍需要的小伙伴可以参考一下
    2022-03-03
  • golang简易实现 k8s 的yaml上传并应用示例方案

    golang简易实现 k8s 的yaml上传并应用示例方案

    这篇文章主要为大家介绍了golang简易实现 k8s 的yaml上传并应用示例方案,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • Golang中Interface接口的三个特性

    Golang中Interface接口的三个特性

    本文详细讲解了Golang中Interface接口的三个特性,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • go install和go get的区别实例详解

    go install和go get的区别实例详解

    go install是Golang用来编译和安装自定义package的工具,下面这篇文章主要给大家介绍了关于go install和go get区别的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • go time.After优化后性能提升34%内存减少67%

    go time.After优化后性能提升34%内存减少67%

    这篇文章主要介绍了go语言time.After优化后性能提升34%内存减少67%实例分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • Go和RabbitMQ构建高效的消息队列系统

    Go和RabbitMQ构建高效的消息队列系统

    本文主要介绍了使用Go语言和RabbitMQ搭建一个简单的消息队列系统,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-01-01
  • 让go程序以后台进程或daemon方式运行方法探究

    让go程序以后台进程或daemon方式运行方法探究

    本文探讨了如何通过Go代码实现在后台运行的程序,最近我用Go语言开发了一个WebSocket服务,我希望它能在后台运行,并在异常退出时自动重新启动,我的整体思路是将程序转为后台进程,也就是守护进程(daemon)
    2024-01-01
  • Go语言学习技巧之如何合理使用Pool

    Go语言学习技巧之如何合理使用Pool

    这篇文章主要给大家介绍了关于Go语言学习技巧之如何合理使用Pool的相关资料,Pool用于存储那些被分配了但是没有被使用,而未来可能会使用的值,以减小垃圾回收的压力。文中通过示例代码介绍的非常详细,需要的朋友可以参考下。
    2017-12-12
  • Go-家庭收支记账软件项目实现

    Go-家庭收支记账软件项目实现

    这篇文章主要介绍了Go-家庭收支记账软件项目实现,本文章内容详细,具有很好的参考价值,希望对大家有所帮助,需要的朋友可以参考下
    2023-01-01

最新评论