如何加快将大数据从一个文件复制到另一个文件的速度?

1 optimization google-sheets google-apps-script google-sheets-api

我需要您的帮助来改进我的应用程序脚本代码,以便将数据集从 Google 表格中的 1 个文件复制到另一个文件。目前,完成此执行需要近 6 分钟,但我们的数据会增加数天。我的详细情况是

  • 在源文件中,工作表数据库的范围为 A1:U11834。但行数会逐日增加。
  • 在目标文件中,我还有一个工作表名称数据库,我想清除旧数据,然后将上述源数据复制到该工作表中。

这是我的代码。

function getdata(){

  let ss = SpreadsheetApp

  // open source file and sheet Database

  let source_file = ss.openById("id_source_file")
  let source_sht_copy = source_file.getSheetByName("Database")

  // Get full range of data
  let lr = source_sht_copy.getRange("A1").getDataRegion().getLastRow()
  let actual_range = `A1:U${lr}`

  Logger.log(actual_range)

  let source_data = source_sht_copy.getRange(actual_range).getValues()
  Logger.log("Copy Done")
  
  // Open destination file
  
  let dest_file = ss.openById("id_dest_file")
  let dest_sht = dest_file.getSheetByName("Database")

  // //clear content sheet database of destination file
  dest_sht.clearContents()
  Logger.log("Delete Old Data Done")

  
  // // paste data from source file to destination file using method 'setValues'
  dest_sht.getRange(actual_range).setValues(source_data)
  Logger.log("Paste Done")


}
Run Code Online (Sandbox Code Playgroud)

这是图像显示处理时间。

在此输入图像描述

Tan*_*ike 6

在您的情况下,为了降低流程成本,使用 Sheets API 怎么样?当Sheets API反映在您的脚本中时,它会变成如下所示。使用Sheets API时,与电子表格服务(SpreadsheetApp)相比,可以降低处理成本。参考号

修改后的脚本:

在使用此脚本之前,请在高级 Google 服务中启用 Sheets API

function getdata2() {
  const srcSpreadsheetId = "###"; // Please set source Spreadsheet ID.
  const dstSpreadsheetId = "###"; // Please set destination Spreadsheet ID.
  const srcRange = "'Database'!A1:U";
  const dstRange = "Database";

  const values = Sheets.Spreadsheets.Values.get(srcSpreadsheetId, srcRange).values;
  const sheetId = SpreadsheetApp.openById(dstSpreadsheetId).getSheetByName(dstRange).getSheetId();
  Sheets.Spreadsheets.batchUpdate({requests:[{repeatCell:{range:{sheetId},fields:"userEnteredValue"}}]}, dstSpreadsheetId);
  Sheets.Spreadsheets.Values.update({values}, dstSpreadsheetId, dstRange, {valueInputOption: "USER_ENTERED"});
}
Run Code Online (Sandbox Code Playgroud)

参考:

  • 漂亮,赞一个! (2认同)