需求
假如有如下表格:
我希望能够得到如下的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"
- }
- ]
复制代码 由于暂时没找到能实现该功能的第三方依赖,所以只能自己写个简单的方法实现此功能
实现
首先安装依赖以便读取excel文件- go get github.com/xuri/excelize/v2
复制代码 然后创建方法- 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格式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
来源:互联网
免责声明:如果侵犯了您的权益,请联系站长(1277306191@qq.com),我们会及时删除侵权内容,谢谢合作! |