【问题标题】:Overwrite google sheet with new data用新数据覆盖谷歌表
【发布时间】:2017-08-16 14:22:26
【问题描述】:

我们使用 Google 表格作为 Data Studio 和其他 BI 产品(Tableau、Domo)的数据源。我们使用 Google Drive API 创建新工作表,并将 mime 类型设置为自动将 CSV 文件转换为工作表。这一切都很好。但是,当我们通过 Drive API 用较新的数据覆盖现有工作表时,它会删除原始工作表并创建一个新工作表(不是工作表本身,而是工作表中唯一的工作表)。这会中断与 Data Studio 数据源的连接(它需要工作表 ID 保持不变)。我们如何使用 Google Sheets API 做同样的事情?这是策略吗?

  1. 截断现有工作表中的数据 (batchClear)。
  2. 从单元格 0,0 (batchUpdate) 开始将新数据写入现有工作表,并在循环中一次写入 X 行(不通过 Sheets API 上传文件...)。

新数据具有相同的标题,但可能行数较少,因此仅覆盖而不清除将不起作用。但是,如果有办法将这一切作为一个批处理更新来完成,请告诉我。

【问题讨论】:

    标签: google-sheets-api


    【解决方案1】:

    回答了我自己的问题。在一个 batchRequest 调用中用新数据覆盖工作表很容易。您只需要发送一个 UpdateSheetPropertiesRequest 来标识工作表并设置新的列数和行数。将其与具有新数据的 UpdateCellsRequest 一起批处理。这里有一些 groovy 代码可以做到这一点:

    // read CSV file into memory as list of RowData records
    def numCols, numRows, rows
    (numCols, numRows, rows) = makeRows(url)
    // overwrite sheet with data
    def requests = []
    // update sheet properties
    requests << new Request()
      .setUpdateSheetProperties(new UpdateSheetPropertiesRequest()
        .setFields('gridProperties(rowCount,columnCount)')
        .setProperties(new SheetProperties()
          .setSheetId(sheetId)
          .setGridProperties(new GridProperties()
            .setColumnCount(numCols)
            .setRowCount(numRows))))
    // overwrite sheet data
    requests << new Request()
      .setUpdateCells(new UpdateCellsRequest()
        .setStart(new GridCoordinate()
          .setColumnIndex(0)
          .setRowIndex(0)
          .setSheetId(sheetId))
        .setRows(rows)
        .setFields('*'))
    // batch those requests
    def body = new BatchUpdateSpreadsheetRequest()
      .setRequests(requests)
    def resp = sheets.spreadsheets()
                     .batchUpdate(id, body)
                     .execute()
    

    【讨论】:

    • 这假设您知道要覆盖的工作表的 ID,但这很容易从电子表格属性中发现。
    • 你能告诉我 rows 属性是如何构成的吗?
    猜你喜欢
    • 2019-08-03
    • 1970-01-01
    • 2017-09-28
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多