Golang實現(xiàn)讀取excel文件并轉(zhuǎn)換為JSON格式
需求
假如有如下表格:

我希望能夠得到如下的JSON數(shù)組以供后續(xù)使用:
[
{
"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"
}
]
由于暫時沒找到能實現(xiàn)該功能的第三方依賴,所以只能自己寫個簡單的方法實現(xiàn)此功能
實現(xiàn)
首先安裝excelize依賴以便讀取excel文件
go get github.com/xuri/excelize/v2
然后創(chuàng)建方法readExcelToJSON
import (
"encoding/json"
"strings"
"github.com/xuri/excelize/v2"
)
// 讀取Excel文件并轉(zhuǎn)換為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{})
// 填充數(shù)據(jù)到map中,使用列名作為key
for j, col := range row {
header := headers[j] // 當前列的列名
cellValue := strings.TrimSpace(col) // 單元格的值
// 不需要轉(zhuǎn)換數(shù)據(jù)類型
rowData[header] = cellValue
}
jsonData, err := json.Marshal(rowData)
if err != nil {
return "", err
}
jsonDataSlice = append(jsonDataSlice, string(jsonData))
}
// 將結(jié)果切片轉(zhuǎn)換為標準格式JSON字符串
jsonResult := "[" + strings.Join(jsonDataSlice, ",") + "]"
return jsonResult, nil
}
如果需要轉(zhuǎn)換數(shù)據(jù)類型,可以把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)
}

到此這篇關(guān)于Golang實現(xiàn)讀取excel文件并轉(zhuǎn)換為JSON格式的文章就介紹到這了,更多相關(guān)Golang讀取excel并轉(zhuǎn)為JSON格式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Windows系統(tǒng)中搭建Go語言開發(fā)環(huán)境圖文詳解
GoLand?是?JetBrains?公司推出的商業(yè)?Go?語言集成開發(fā)環(huán)境(IDE),這篇文章主要介紹了Windows系統(tǒng)中搭建Go語言開發(fā)環(huán)境詳解,需要的朋友可以參考下2022-10-10
Go語言配置數(shù)據(jù)庫連接池的實現(xiàn)
本文內(nèi)容我們將解釋連接池背后是如何工作的,并探索如何配置數(shù)據(jù)庫能改變或優(yōu)化其性能。文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-12-12
GO中的時間操作總結(jié)(time&dateparse)
日常開發(fā)過程中,對于時間的操作可謂是無處不在,但是想實現(xiàn)時間自由還是不簡單的,多種時間格式容易混淆,本文為大家整理了一下GO中的時間操作,有需要的可以參考下2023-09-09
10個現(xiàn)代網(wǎng)站開發(fā)必備的Go軟件包工具盤點
這篇文章主要為大家介紹了10個現(xiàn)代網(wǎng)站開發(fā)必備的Go軟件包,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-10-10

