Go 调用 GoogleSheets API 写入数据

Go 调用 GoogleSheets API 写入数据

前置依赖

1 创建 Google Cloud 项目

https://console.cloud.google.com/projectcreate

在项目页面上,确保启用了 Google Sheets API。你可以在“API 和服务”>“库”中搜索并启用该 API。

2 创建服务账号密钥:

  • 在 Google Cloud Console 的项目页面上,导航到“API 和服务”>“凭据”。
  • 点击“创建凭据”按钮,选择“服务账号密钥”。
  • 在“服务账号”部分,选择“新建服务账号”,并为其指定一个名称。
  • 在“角色”部分,选择“项目”>“编辑者”角色。
  • 选择“JSON”作为密钥类型,并点击“创建”按钮。这将下载一个 JSON 文件,其中包含你的服务账号密钥。
  • Google Sheet 分享给服务账号,邀请其成为“编辑者”,被邀请人填入服务账号的邮箱

Go 代码

安装 Go 的 Google Sheets API 客户端库:

go get -u google.golang.org/api/sheets/v4
import (
	"golang.org/x/oauth2/google"
	"google.golang.org/api/sheets/v4"
)

func main() {

	// 加载密钥文件
	b, err := ioutil.ReadFile(credential.json)
	if err != nil {
		log.Fatalf("无法读取密钥文件:%v", err)
	}

	// 从密钥文件创建一个配置
	config, err := google.JWTConfigFromJSON(b, sheets.SpreadsheetsScope)
	if err != nil {
		log.Fatalf("无法创建配置:%v", err)
	}

	// 使用配置创建一个客户端
	client := config.Client(context.Background())

	// 创建 Sheets 服务
	sheetsService, err := sheets.New(client)
	if err != nil {
		log.Fatalf("无法创建 Sheets 服务:%v", err)
	}

	// 指定要写入的 Spreadsheet ID 和 Sheet 名称
	spreadsheetID := "MY_GG_SHEET_ID"
	// sheetName := "test"
	sheetName := time.Now().Format("010215")

	// 创建一个 SheetProperties 对象,指定新 Sheet 的名称
	sheetProperties := &sheets.SheetProperties{
		Title: sheetName,
	}

	// 创建一个 AddSheetRequest 对象,将 SheetProperties 放入其中
	addSheetRequest := &sheets.AddSheetRequest{
		Properties: sheetProperties,
	}

	// 创建一个 BatchUpdateSpreadsheetRequest 对象,将 AddSheetRequest 放入其中
	batchUpdateRequest := &sheets.BatchUpdateSpreadsheetRequest{
		Requests: []*sheets.Request{
			{
				AddSheet: addSheetRequest,
			},
		},
	}

	// 执行批量更新操作,创建新的 Sheet
	batUpdResp, err := sheetsService.Spreadsheets.BatchUpdate(spreadsheetID, batchUpdateRequest).Do()
	if err != nil {
		log.Fatalf("Unable to create new sheet: %v", err)
		panic("执行批量更新操作,创建新的 Sheet失败")
	}

	// 打印新 Sheet 的 ID
	newSheetID := batUpdResp.Replies[0].AddSheet.Properties.SheetId
	fmt.Printf("Created new sheet with ID: %d\n", newSheetID)

	// 构建要写入的数据
	values := [][]interface{}{
		{"Value 1", "Value 2", "Value 3"},
		{"Value 4", "Value 5", "Value 6"},
	}

	// 构建写入请求
	writeRequest := &sheets.ValueRange{
		Values: values,
	}

	//// 执行写入请求
	//_, err = sheetsService.Spreadsheets.Values.Update(spreadsheetID, sheetName, writeRequest).ValueInputOption("RAW").Do()
	//if err != nil {
	//	log.Fatalf("无法写入数据:%v", err)
	//}
	//fmt.Println("数据已成功写入 Google Sheets!")

	// 执行追加操作
	appendResp, err := sheetsService.Spreadsheets.Values.Append(spreadsheetID, sheetName, writeRequest).ValueInputOption("USER_ENTERED").Do()
	if err != nil {
		log.Fatalf("Unable to append data: %v", err)
	}
	// 打印追加操作的结果
	fmt.Printf("Appended %d rows\n", appendResp.Updates.UpdatedRows)
}

参考资料

https://developers.google.com/docs/api/reference/rest https://github.com/googleworkspace/go-samples/tree/main/sheets/quickstart

Licensed under CC BY-NC-SA 4.0
Built with Hugo
主题 StackJimmy 设计