使用Golang以JSON格式处理Google Sheet数据

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

enter image description here

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的步骤:

  1. 访问Google Cloud Console
  2. 创建新项目或选择现有项目
  3. 启用Google Sheets API
  4. 创建服务账号并下载JSON密钥文件
  5. 将电子表格共享给服务账号邮箱

如果需要通过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应用中。

回到顶部