我最近開始撰寫一個程式來將 CSV 和 SQL 匯出到谷歌表。在某些情況下,我需要在創建作業表和/或更新作業表時創建一個 NamedRange。谷歌官方檔案有點混亂,對我幫助不大。任何人都可以向我展示示例代碼或指出正確的方向嗎?
現在我有一些類似的東西。這只是展示其中一種場景的示例代碼。
func writeSS(ssid string, content [][]interface{}) {
ctx := context.Background()
b, err := ioutil.ReadFile("./credentials/client_secret.json")
if err != nil {
log.Fatalf("Unable to read client secret file: %v", err)
}
config, err := google.ConfigFromJSON(b, "https://www.googleapis.com/auth/spreadsheets.readonly")
if err != nil {
log.Fatalf("Unable to parse client secret file to config: %v", err)
}
client := getClient(config)
srv, err := sheets.NewService(ctx, option.WithHTTPClient(client))
if err != nil {
log.Fatalf("Unable to retrieve Sheets client: %v", err)
}
spreadsheetId := ssid
rangeData := "Sheet name!A1:A6"
rb := &sheets.BatchUpdateValuesRequest{
ValueInputOption: "USER_ENTERED",
}
rb.Data = append(rb.Data, &sheets.ValueRange{
Range: rangeData,
Values: content,
})
_, err = srv.Spreadsheets.Values.BatchUpdate(spreadsheetId, rb).Context(ctx).Do() //Check this again
// _, err = srv.Spreadsheets.Values.Update(spreadsheetId, writeRange, &vr).ValueInputOption("USER_ENTERED").Do()
if err != nil {
log.Fatal(err)
}
fmt.Println("Done.")
}
uj5u.com熱心網友回復:
我相信你的目標如下。
- 您想使用帶有 golang 的 googleapis 創建命名范圍。
- 您已經能夠使用 Sheets API 獲取和放置 Google 電子表格的值。
改裝要點:
- 當我看到你的腳本時,使用了Sheets API的電子表格.values.batchUpdate方法。當您想在現有的 Google 電子表格中創建命名范圍時,請使用電子表格.batchUpdate 的方法。
- 在您的腳本中,您嘗試使用
https://www.googleapis.com/auth/spreadsheets.readonly. 我認為發生了與范圍相關的錯誤。在這種情況下,請使用https://www.googleapis.com/auth/spreadsheets.
當這些點反映在你的腳本中時,它變成如下。
修改后的腳本:
config, err := google.ConfigFromJSON(b, "https://www.googleapis.com/auth/spreadsheets")
if err != nil {
log.Fatalf("Unable to parse client secret file to config: %v", err)
}
client := getClient(config)
srv, err := sheets.NewService(ctx, option.WithHTTPClient(client))
if err != nil {
log.Fatalf("Unable to retrieve Sheets client: %v", err)
}
spreadsheetId := "###" // Please set your Spreadsheet ID.
sheetId := 1234567890 // Please set your sheet ID.
nameOfNamedRange := "sampleNamedRange1" // Please set the name of the named range.
req := sheets.Request{
AddNamedRange: &sheets.AddNamedRangeRequest{
NamedRange: &sheets.NamedRange{
Range: &sheets.GridRange{
SheetId: int64(sheetId),
StartRowIndex: 1,
EndRowIndex: 3,
StartColumnIndex: 1,
EndColumnIndex: 3,
},
Name: nameOfNamedRange,
},
},
}
requestBody := &sheets.BatchUpdateSpreadsheetRequest{
Requests: []*sheets.Request{&req},
}
resp, err := srv.Spreadsheets.BatchUpdate(spreadsheetId, requestBody).Do()
if err != nil {
log.Fatal(err)
}
fmt.Print(resp)
- 在此示例腳本中,gridrange
StartRowIndex: 1, EndRowIndex: 3, StartColumnIndex: 1, EndColumnIndex: 3,表示單元格“B2:C3”。 - 運行此腳本
nameOfNamedRange時sheetId,會使用 Google 電子表格中的“B2:C3”范圍創建的命名范圍spreadsheetId。
筆記:
- 不幸的是,從您的顯示腳本中,我無法知道檔案的檔案名,包括訪問令牌和重繪 令牌。如果Quickstart 中
token.json使用了檔案名,請在運行修改后的腳本之前洗掉該檔案。并且,請重新授權范圍。請注意這一點。
參考:
- 方法:電子表格.batchUpdate
- 添加命名范圍請求
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/343534.html
標籤:走 谷歌表格 google-sheets-api 命名范围
下一篇:我想為dig創建界面
