首页 文章

用新数据覆盖谷歌表

提问于
浏览
0

我们使用Google表格作为Data Studio和其他BI产品(Tableau,Domo)的数据源 . 我们使用Google Drive API创建新工作表,并设置mime类型以自动将CSV文件转换为工作表 . 一切正常 . 但是,当我们通过Drive API覆盖包含较新数据的现有工作表时,它会删除原始工作表并创建一个新工作表(不是工作表本身,而是工作表中唯一的工作表) . 这打破了与Data Studio数据源的连接(它需要工作表ID保持不变) . 我们如何使用Google表格API执行相同的操作?这是策略吗?

  • 截断现有工作表中的数据(batchClear) .

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

新数据具有相同的 Headers 但可能具有较少的行,因此只有覆盖而不清除将无效 . 但如果有一种方法可以作为一个批量更新,请告诉我 .

1 回答

  • 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()
    

相关问题