go - 如何使用 Google Sheets API v4 和 Go 设置单元格格式?

标签 go google-sheets-api

我必须粘贴一个日期。据我在文档和 SO 中的理解,我必须粘贴从 1899 年 12 月 30 日起过去的天数,并将单元格格式设置为日期。

最近一小时正在寻找使用 Go API 客户端进行格式化的示例。有什么例子吗?

谢谢!

编辑:我的代码!

Google libs used:
"google.golang.org/api/option"
"google.golang.org/api/sheets/v4"

功能:

func googleAppend(bookID, sheet, tableCorner string, data []interface{}) {
    srv := connect(key)
    var vr sheets.ValueRange
    vr.Values = append(vr.Values, data)
    _, err := srv.Spreadsheets.Values.Append(bookID,
        sheet+"!"+tableCorner, &vr).ValueInputOption("RAW").Do()
    if err != nil {
        log.Fatalf("Unable to retrieve data from sheet. %v", err)
    }
}

测试使用:

func Test_googleAppend(t *testing.T) {
    sample := []interface{}{"swwewewew", 3, 47120} <-- for what I understand, the destination of 3434343 should be formated to DATE.
    googleAppend("XXX", "SHEET", "A1", sample)
}

期望的结果: enter image description here

最佳答案

我相信您的目标如下。

  • 您想要设置“C”列单元格的数字格式。
  • 例如,您想要将 47120 转换为 1/2/2029
  • 您希望使用 Golang 的 googleapis 来实现此目的。
  • 您已经能够使用 Sheets API 获取和输入值。

修改点:

  • 为了更改单元格格式,需要使用Sheets API中的batchUpdate方法。对于您的情况,我想建议在batchUpdate方法中使用RepeatCellRequest更改数字格式。

当这反射(reflect)到您的脚本中时,请按如下方式进行修改。

修改后的脚本:

运行脚本之前,请设置sheetId

func googleAppend(bookID, sheet, tableCorner string, data []interface{}) {
    srv := connect(key)
    var vr sheets.ValueRange
    vr.Values = append(vr.Values, data)
    _, err := srv.Spreadsheets.Values.Append(bookID,
        sheet+"!"+tableCorner, &vr).ValueInputOption("RAW").Do()
    if err != nil {
        log.Fatalf("Unable to retrieve data from sheet. %v", err)
    }

    // I added below script.
    sheetId := 12345678  // Please set the sheet ID which is not Spreadsheet ID. Please be careful this.

    repeatCellRequest := &sheets.RepeatCellRequest{
        Fields: "userEnteredFormat.numberFormat",
        Range: &sheets.GridRange{
            SheetId:          int64(sheetId),
            StartRowIndex:    0,
            StartColumnIndex: 2,
            EndColumnIndex:   3,
        },
        Cell: &sheets.CellData{
            UserEnteredFormat: &sheets.CellFormat{
                NumberFormat: &sheets.NumberFormat{
                    Pattern: "m/d/yyyy",
                    Type:    "DATE",
                },
            },
        },
    }
    requestBody := &sheets.BatchUpdateSpreadsheetRequest{
        Requests: []*sheets.Request{&sheets.Request{
            RepeatCell: repeatCellRequest,
        }},
    }
    resp, err := srv.Spreadsheets.BatchUpdate(bookID, requestBody).Do()
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("%#v\n", resp)
}
  • 在此修改中,使用脚本将值放入电子表格后,“C”列的单元格格式将使用batchUpdate 方法中的 RepeatCellRequest 进行更改。

注意:

  • 在这种情况下,当您运行一次更改数字格式的脚本时,可能不需要再次运行。因为当脚本运行时,“C”列的数字格式发生了变化。但我不确定你的实际情况。因此,请根据您的实际情况修改脚本。

引用文献:

关于go - 如何使用 Google Sheets API v4 和 Go 设置单元格格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62964170/

相关文章:

go - 如何在Win 10上本地测试Gol App Engine应用并使用app.yaml

go - 如何获取golang中两个目录内容之间的差异

javascript - 根据偏移量更新表格单元格

php - google-sheets api 未触发 google 表格中的 onEdit 功能

interface - 鸭子类型(duck typing)在 Go 中打字

go - slice 中指针的行为

java - Google 电子表格的 Maven 依赖项

php - 谷歌表 API 4 : How to append to the end of the row

go - 在 GO 中获取实际文件大小与表观大小

gdata - Zend GData 电子表格工作表 ID