【问题标题】:How to create a NamgedRange using google sheets API when doing a batch update with Go使用 Go 进行批量更新时如何使用 google sheet API 创建 NamgedRange
【发布时间】:2021-12-15 20:57:49
【问题描述】:

我最近开始编写一个程序来将 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.")
}

【问题讨论】:

  • 有什么问题?试着把它放在表格中 - 我想做 X,我尝试 Y,而不是我得到 Z。你有错误吗?您要遵循哪些文档?
  • 没有问题,我只是想获取一个关于如何创建 RangedName 的示例代码。

标签: go google-sheets google-sheets-api named-ranges


【解决方案1】:

我相信你的目标如下。

  • 您想使用带有 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)
  • 在此示例脚本中,StartRowIndex: 1, EndRowIndex: 3, StartColumnIndex: 1, EndColumnIndex: 3, 的网格范围表示单元格“B2:C3”。
  • 当此脚本运行时,nameOfNamedRange 的命名范围是在spreadsheetId 的 Google 电子表格中使用sheetId 的“B2:C3”范围创建的。

注意:

  • 很遗憾,从您的显示脚本中,我无法知道文件的文件名,包括访问令牌和刷新令牌。如果文件名是token.json 中使用的the Quickstart,请在运行修改后的脚本之前删除该文件。并且,请重新授权范围。请注意这一点。

参考资料:

【讨论】:

    猜你喜欢
    • 2023-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 2011-03-24
    • 1970-01-01
    相关资源
    最近更新 更多