使用Golang以JSON格式处理Google Sheet数据
使用Golang以JSON格式处理Google Sheet数据 我在Google Sheets中有以下示例数据,有没有办法将Google Apps Script与Go语言结合使用,以便我可以在GO应用程序中将表格数据作为Json处理?

1 回复
更多关于使用Golang以JSON格式处理Google Sheet数据的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
要将Google Sheets数据以JSON格式集成到Go应用中,可以通过Google Sheets API v4实现。以下是完整的示例代码:
package main
import (
"context"
"encoding/json"
"fmt"
"log"
"os"
"golang.org/x/oauth2"
"golang.org/x/oauth2/google"
"google.golang.org/api/option"
"google.golang.org/api/sheets/v4"
)
// 定义JSON结构体
type SheetData struct {
Range string `json:"range"`
MajorDimension string `json:"majorDimension"`
Values [][]string `json:"values"`
}
func main() {
ctx := context.Background()
// 1. 从服务账号密钥文件读取凭证
b, err := os.ReadFile("credentials.json")
if err != nil {
log.Fatalf("无法读取凭证文件: %v", err)
}
// 2. 配置JWT凭证
config, err := google.JWTConfigFromJSON(b, sheets.SpreadsheetsReadonlyScope)
if err != nil {
log.Fatalf("无法解析凭证配置: %v", err)
}
// 3. 创建HTTP客户端
client := config.Client(ctx)
// 4. 创建Sheets服务
srv, err := sheets.NewService(ctx, option.WithHTTPClient(client))
if err != nil {
log.Fatalf("无法创建Sheets服务: %v", err)
}
// 5. 指定电子表格ID和范围
spreadsheetId := "your-spreadsheet-id"
readRange := "Sheet1!A1:C3"
// 6. 获取数据
resp, err := srv.Spreadsheets.Values.Get(spreadsheetId, readRange).Do()
if err != nil {
log.Fatalf("无法获取数据: %v", err)
}
// 7. 转换为自定义JSON结构
sheetData := SheetData{
Range: readRange,
MajorDimension: "ROWS",
Values: resp.Values,
}
// 8. 编码为JSON
jsonData, err := json.MarshalIndent(sheetData, "", " ")
if err != nil {
log.Fatalf("JSON编码失败: %v", err)
}
// 9. 输出JSON
fmt.Println(string(jsonData))
// 10. 处理数据示例
if len(resp.Values) == 0 {
fmt.Println("未找到数据")
} else {
for _, row := range resp.Values {
fmt.Printf("%s, %s, %s\n", row[0], row[1], row[2])
}
}
}
需要安装的依赖:
go get golang.org/x/oauth2
go get golang.org/x/oauth2/google
go get google.golang.org/api/sheets/v4
创建服务账号并下载credentials.json的步骤:
- 访问Google Cloud Console
- 创建新项目或选择现有项目
- 启用Google Sheets API
- 创建服务账号并下载JSON密钥文件
- 将电子表格共享给服务账号邮箱
如果需要通过Google Apps Script作为中间层,可以使用以下Apps Script代码发布为Web应用:
function doGet() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var data = sheet.getDataRange().getValues();
return ContentService
.createTextOutput(JSON.stringify(data))
.setMimeType(ContentService.MimeType.JSON);
}
然后在Go中调用该Web应用URL:
func fetchFromAppsScript(url string) ([][]interface{}, error) {
resp, err := http.Get(url)
if err != nil {
return nil, err
}
defer resp.Body.Close()
var data [][]interface{}
err = json.NewDecoder(resp.Body).Decode(&data)
return data, err
}
两种方法都能实现将Google Sheets数据以JSON格式集成到Go应用中。

