【问题标题】:setValues in the Google Apps script is very slowGoogle Apps 脚本中的 setValues 非常慢
【发布时间】:2023-03-26 21:55:01
【问题描述】:

我有一个简单的脚本,可以从一张纸上复制值并粘贴到另一张纸上,但是每次都需要 10 多分钟。

文件中有大约 100K 行。我什至尝试将它们分开,但没有任何区别。

function makeDataCopies()
{
  Logger.log("starts");
  var copyTo = DEST.getSheetByName(WSHEET);
  var copyFrom = SOURCE.getSheetByName(WSHEET);
  
  var copyArray = copyFrom.getDataRange().getValues();
 
  Logger.log("calls copy");
  copyTo.getRange(1,1,copyArray.length,copyArray[0].length).setValues(copyArray);

}

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    我相信你的目标如下。

    • 您希望降低脚本的处理成本。

    我认为从您There are about 100K rows in the file. 的情况来看,我想建议针对您的情况使用Sheets API。使用 Sheets API 时,可以通过 SpreadsheetApp 的 Google Spreadsheet 服务降低处理成本。 Ref

    当您使用 Sheets API 修改您的脚本时,它变为如下。

    修改后的脚本:

    在使用此脚本之前,please enable Sheets API at Advanced Google services

    function makeDataCopies() {
      var dstSpreadsheetId = "###"; // Please set the destination Spreadsheet ID.
      var srcSpreadsheetId = "###"; // Please set the source Spreadsheet ID.
      var WSHEET = "###"; // Please set the sheet name.
    
      var srcValues = Sheets.Spreadsheets.Values.get(srcSpreadsheetId, WSHEET).values;
      Sheets.Spreadsheets.Values.update({values: srcValues}, dstSpreadsheetId, WSHEET, {valueInputOption: "USER_ENTERED"});
    }
    

    参考资料:

    【讨论】:

    • @KES 感谢您的回复。很高兴您的问题得到解决。
    • 现在我遇到了日期字段的问题。他们都搞砸了。我已经尝试过 RAW 和 USER_ENTERED,每个都有自己的问题。我该如何克服呢?
    • @KES 感谢您的回复。关于你的新问题,我想支持你。但我必须为我糟糕的英语水平道歉。不幸的是,来自now i am having issues with date fields. they are getting all messed up. i have tried both RAW and USER_ENTERED, each have their own issues.,我无法理解您的情况。那么,为了正确理解它,通过包含更多信息,您可以将其作为新问题发布吗?这样,它将帮助包括我在内的用户思考解决方案。当你能合作解决你的问题时,我很高兴。可以配合吗?
    猜你喜欢
    • 1970-01-01
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-21
    • 2011-11-26
    • 2020-06-09
    • 1970-01-01
    相关资源
    最近更新 更多