gpt4 book ai didi

google-apps-script - 如何减少在 for 循环中使用 setValues() 和 copyto() 的谷歌应用程序脚本的运行时间

转载 作者:行者123 更新时间:2023-12-04 09:31:22 25 4
gpt4 key购买 nike

如何减少在 forloop 中使用 setValues() 和 copyto() 的谷歌应用程序脚本的运行时间
我找到一些代码并修改它
用于复制格式复制和粘贴
我不知道为什么使用它 setValues() 和 CopyTo() 但它工作..
我认为问题是 forloop 中的某个类。
但,
在这种情况下,我不知道如何从 forloop 中分离 setValues(),copyto()
它运行良好,但在 forloop 中通过 setValues() 花费很多时间
我如何将它与 forloop 分开以加快速度

function Duplicate_Format() {
const SS = SpreadsheetApp.getActiveSpreadsheet();
const Source_NotationRange = "B6:B47";
const Target_Sheet = SS.getSheets();
const Source_Data_sheet = SpreadsheetApp.getActive().getSheetByName('01.01');
const Source_Data_Range = Source_Data_sheet.getRange(Source_NotationRange);
var Location_First = 4;
var Location_Quantity = 366;
const Location_Last = Location_First + Location_Quantity -1;

for( let j = Location_First ; j <= Location_Last; j++){
var Target_Sheets = Target_Sheet[j];
var Target_Range = Target_Sheets.getRange(Source_NotationRange);
Target_Range.setValues(Source_Data_Range.getValues());
Source_Data_Range.copyTo(Target_Range, {formatOnly:true});
}
}

最佳答案

我相信你的目标如下。

  • 您希望降低脚本的流程成本。

  • 为了实现这一点,我想建议使用 Sheets API。在这种情况下,修改后的脚本的流程如下。
  • 为Sheets API中batchUpdate方法的CopyPasteRequest创建请求体。
  • 使用创建的请求正文请求 Sheets API。

  • 修改后的脚本:
    在运行脚本之前, please enable Sheets API at Advanced Google services .
    function Duplicate_Format() {
    const SS = SpreadsheetApp.getActiveSpreadsheet();
    const Source_NotationRange = "B6:B47";
    const Target_Sheet = SS.getSheets();
    const Source_Data_sheet = SpreadsheetApp.getActive().getSheetByName('01.01');
    const Source_Data_Range = Source_Data_sheet.getRange(Source_NotationRange);
    var Location_First = 4;
    var Location_Quantity = 366;
    const Location_Last = Location_First + Location_Quantity -1;

    // I modified below script.
    // 1. Create the request body for the CopyPasteRequest of the method of batchUpdate in Sheets API.
    var requests = [];
    var srcStartRow = Source_Data_Range.getRow() - 1;
    var srcEndRow = srcStartRow + Source_Data_Range.getNumRows();
    var srcStartCol = Source_Data_Range.getColumn() - 1;
    var srcEndCol = srcStartCol + Source_Data_Range.getNumColumns();
    for( let j = Location_First ; j <= Location_Last; j++){
    var Target_Sheets = Target_Sheet[j];
    var Target_Range = Target_Sheets.getRange(Source_NotationRange);
    var dstStartRow = Target_Range.getRow() - 1;
    var dstEndRow = dstStartRow + Target_Range.getNumRows();
    var dstStartCol = Target_Range.getColumn() - 1;
    var dstEndCol = dstStartCol + Target_Range.getNumColumns();
    requests.push({
    copyPaste:{
    source:{sheetId:Source_Data_sheet.getSheetId(),startRowIndex:srcStartRow,endRowIndex:srcEndRow,startColumnIndex:srcStartCol,endColumnIndex:srcEndCol},
    destination:{sheetId:Target_Sheets.getSheetId(),startRowIndex:dstStartRow,endRowIndex:dstEndRow,startColumnIndex:dstStartCol,endColumnIndex:dstEndCol},
    pasteType:"PASTE_NORMAL"
    }
    });
    }

    // 2. Request to Sheets API using the created request body.
    var res = Sheets.Spreadsheets.batchUpdate({requests: requests}, SS.getId());
    }
    引用:
  • Advanced Google services
  • Method: spreadsheets.batchUpdate
  • CopyPasteRequest
  • 关于google-apps-script - 如何减少在 for 循环中使用 setValues() 和 copyto() 的谷歌应用程序脚本的运行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62826505/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com