前置依赖
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