Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 如何使此脚本运行得更快?_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 如何使此脚本运行得更快?

Google apps script 如何使此脚本运行得更快?,google-apps-script,google-sheets,Google Apps Script,Google Sheets,您好,我正在尝试从“book”表中获取值,然后将其复制到“Completed”表中。它获取book中的值并将其存储在数据数组中,然后将其复制到“已完成”工作表中。它的工作很好,但很慢,这在时间上危及了我的工作。我怎样才能让它跑得更快 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var clear_sheet = spreadsheet.getSheetByName('Completed_Orders'); // clear

您好,我正在尝试从“book”表中获取值,然后将其复制到“Completed”表中。它获取book中的值并将其存储在数据数组中,然后将其复制到“已完成”工作表中。它的工作很好,但很慢,这在时间上危及了我的工作。我怎样才能让它跑得更快

var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var clear_sheet = spreadsheet.getSheetByName('Completed_Orders'); // clear the destination sheet first
  clear_sheet.getRange('A2:X').clear();


  var sheet = spreadsheet.getSheetByName('book'); //source sheet
  var Datarange = sheet.getRange('Q3:Q'); //range to check
  var Datavalue = (Datarange.getValues());
  var dest = spreadsheet.getSheetByName('Completed_Orders'); //destination sheet
  var data = [];
  for (i=0; i<Datavalue.length;i++) {
    if ( Datavalue[i] == "Completed") {
      data.push.apply(data,sheet.getRange(i+3,1,1,24).getValues());
    }
  }
  dest.getRange(2,1,data.length,data[0].length).setValues(data);

  var column = dest.getRange('A3:A');
  var values = column.getValues(); // get all data in one call
  var ct = 0;
  while ( values[ct][0] != "" ) { // to find the last row correctly, getLastRow is not working perfectly
    ct++;
  }
  var endRow = ct+2;
}
var spreadsheet=SpreadsheetApp.getActiveSpreadsheet();
var clear_sheet=spreadsheet.getSheetByName('Completed_Orders');//首先清除目的地工作表
clear_sheet.getRange('A2:X').clear();
var sheet=spreadsheet.getSheetByName('book')//源表
var Datarange=sheet.getRange('Q3:Q')//检查范围
var Datavalue=(Datarange.getValues());
var dest=spreadsheet.getSheetByName(“已完成的订单”)//目的地表
var数据=[];
对于(i=0;i试试这个:

不要使用此语法
var values=sheet.getRange('A3:A').getValues()
,因为它会将数据一直获取到getMaxRows()。请改用
var values=sheet.getRange(3,1,sheet.getLastRow()-2,1).getValues()

数据值[i]也是一整行

function myfunction() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var clear_sheet = spreadsheet.getSheetByName('Completed_Orders'); 
  clear_sheet.getRange(2,1,clear_sheet.getLastRow()-1,24).clear();    
  var sheet = spreadsheet.getSheetByName('book'); //source sheet
  var Datarange = sheet.getRange(3,17,sheet.getLastRow()-2,1); //range to check
  var Datavalue = Datarange.getValues();
  var dest = spreadsheet.getSheetByName('Completed_Orders'); //destination sheet
  var data = [];
  for (var i=0;i<Datavalue.length;i++) {
    if (Datavalue[i]["************You need another index here**************"] == "Completed") { //need another index Datavalue is 2d
      data.push(sheet.getRange(i+3,1,1,24).getValues());
    }
  }
  dest.getRange(2,1,data.length,data[0].length).setValues(data);
}
函数myfunction(){
var电子表格=SpreadsheetApp.getActiveSpreadsheet();
var clear_sheet=spreadsheet.getSheetByName('Completed_Orders');
clear_sheet.getRange(2,1,clear_sheet.getLastRow()-1,24).clear();
var sheet=spreadsheet.getSheetByName('book');//源工作表
var Datarange=sheet.getRange(3,17,sheet.getLastRow()-2,1);//要检查的范围
var Datavalue=Datarange.getValues();
var dest=spreadsheet.getSheetByName('Completed_Orders');//目标工作表
var数据=[];

对于(var i=0;iy)您的问题可以通过提供您目前为止在尝试优化脚本方面的工作来改进。具体说明是否为“最佳实践”按照文档中的说明进行操作,并使用控制台提供代码中最慢的块。时间
。有关更多详细信息,请参阅。您可以使用虚拟数据共享电子表格吗?此外,请检查我是否已进行了更改,但仍在缓慢运行。此外,如果所需时间超过6分钟,脚本将自动停止。当我走近查看时,我会重新启动这意味着您需要为循环中的电子表格的每一行获取完整的行。因此,最好的方法是一次获取所有数据,并将列
17
Completed
进行比较,并且只将完成的行包含到
oA
中。这应该运行得更快
function myfunction() {
  var ss=SpreadsheetApp.getActiveSpreadsheet();
  var ssh=ss.getSheetByName('book');
  var dsh=ss.getSheetByName('Completed_Orders'); 
  dsh.getRange(2,1,dsh.getLastRow()-1,24).clear();    
  var dv=ssh.getRange(3,1,ssh.getLastRow()-2,24).getValues();//this version just gets this data one time so it should a lot faster.
  var data=[];
  for (var i=0;i<dv.length;i++) {
    if (dv[i][16]=="Completed") { 
      data.push(dv[i]);
    }
  }
  dsh.getRange(2,1,data.length,data[0].length).setValues(data);
}