Arrays 使用带有for循环的setvalues

Arrays 使用带有for循环的setvalues,arrays,for-loop,google-apps-script,Arrays,For Loop,Google Apps Script,我目前正在尝试执行“copyTo”或“setValues”操作。 我需要将一个网格(Sheet1!J16:Q36)复制到另一个网格(Sheet2!J16:Q36) 但并不是每个细胞都能被复制。只能复制与表1值不相同的值 我已经成功地尝试了下面的代码,但遗憾的是脚本需要很长时间。 我知道在数组中使用getValues的批处理操作会更快,但我缺乏执行该脚本的能力 我还使用了第三个网格来比较sheet1和2的值,并返回1或0。仅当显示值1时,for循环才会考虑该单元格。我认为这是低效的 谢谢你的帮助。

我目前正在尝试执行“copyTo”或“setValues”操作。 我需要将一个网格(Sheet1!J16:Q36)复制到另一个网格(Sheet2!J16:Q36) 但并不是每个细胞都能被复制。只能复制与表1值不相同的值

我已经成功地尝试了下面的代码,但遗憾的是脚本需要很长时间。 我知道在数组中使用getValues的批处理操作会更快,但我缺乏执行该脚本的能力

我还使用了第三个网格来比较sheet1和2的值,并返回1或0。仅当显示值1时,for循环才会考虑该单元格。我认为这是低效的

谢谢你的帮助。我非常感激

 var ratenprogramm = SpreadsheetApp.getActiveSpreadsheet(); 
 var ratenprogrammmain = ratenprogramm.getSheetByName("Ratenprogramm");
 var vorlageratenprogramm = 
 ratenprogramm.getSheetByName("VorlageRatenprogramm");

for(i=1;i<=21;i++)
{
  for(j=1;j<=8;j++)
  {
    if(vorlageratenprogramm.getRange(37+i,9+j).getValue() == 1)
    {
      vorlageratenprogramm.getRange(15+i,9+j).copyTo(ratenprogrammmain.getRange(15+i,9+j),{contentsOnly: true}); 
    }

  }
}
var ratenprogram=SpreadsheetApp.getActiveSpreadsheet();
var ratenprogrammmain=ratenprogramm.getSheetByName(“ratenprogramm”);
var Vorlagrate程序=
ratenprogramm.getSheetByName(“VorlagratenProgramm”);
对于(i=1;i
  • 正如您所注意到的,调用任何外部服务,包括方法 如
    getValue()
    使脚本变慢,请参阅

  • 通过替换多个
    getValue()
    通过单个
    getValues()
    请求

  • 在嵌套循环中,可以指定多个范围 以及可以用, 将Sheets API方法转换为 目标图纸的相应范围,另请参见

样品
函数myFunction(){
var ratenprogram=SpreadsheetApp.getActiveSpreadsheet();
var ratenprogrammmain=ratenprogramm.getSheetByName(“ratenprogramm”);
var vorlageratenprogramm=ratenprogramm.getSheetByName(“vorlageratenprogramm”);
var数据=[];
var范围=涡率程序。getRange(15,9,21,8);
var values=range.getValues();

对于(i=0;请包括您的整个脚本,我们无法确定
vorlagratenprogram
ratenprogrammain
定义为什么。嗨,罗斯,对不起,我忘了。这些只是工作表名称。我将它们放在上面的文本中。注意:您需要手动启用工作表API才能使此脚本工作。非常感谢Ziganotschka和Ross谢谢你的帮助。关于你的代码我有两个问题:-我需要添加哪一行才能在我选择的网格中获得“数据”输入?(比如“ratenprogramm.getRange(16,9,21,8))-关于copyTo的第二个示例:这将非常有效。但我在网格中也有一些不应复制的空单元格。有没有办法忽略空单元格并复制其余的单元格?非常感谢。:)忽略空单元格的方法并不简单,在复制整个区域后,从后面删除应该保持为空的单元格可能会更简单。否则,您需要像使用
if…getValue…
那样选择要复制的所有区域(慢一点)或(快一点)与我的示例中的
batchUpdate
。要获取范围(16,9,21,8)中的数据,请将
var range=vorlageratenprogram.getRange(15,9,21,8);
替换为
var range=vorlageratenprogram.getRange(16,9,21,8)
我仍在努力使其正常工作。我不知道如何使batchUpdate正常工作。我不知道填充数组(var数据)应该在代码中的什么位置。您能告诉我将setValues(数据)部分准确地放在哪里吗?目前我还收到一个错误,该错误的状态类似于(的属性)无法读取未定义的0.0)。再次感谢您宝贵的时间。如果您使用
batchUpdate
,则没有
setValues()
Sheets.Spreadsheets.Values.batchUpdate(资源,电子表格ID)
数据中指定的值设置为
数据中指定的范围。唯一的问题是:如果要在不同的工作表中设置值,
范围应定义为:
范围:'ratenprogram!'+单元格',我用完整的代码更新了我的答案。
function myFunction() {

 var ratenprogramm = SpreadsheetApp.getActiveSpreadsheet(); 
 var ratenprogrammmain = ratenprogramm.getSheetByName("Ratenprogramm");
 var vorlageratenprogramm = ratenprogramm.getSheetByName("VorlageRatenprogramm");
 var data=[];
 var range=vorlageratenprogramm.getRange(15,9,21,8);
 var values=range.getValues();
 for(i=0;i<4;i++)
  {
    for(j=0;j<1;j++)
    {
      if(values[i+1][j] == 1)
       {
        var cell=range.getCell(i+1,j+1).getA1Notation();
        data.push([{ range:'Ratenprogramm!'+ cell, values: [[values[i+1][j]]]}]);
      }
    }
  }
  var resource = {
    valueInputOption: "USER_ENTERED",
    data: data
  };
  Sheets.Spreadsheets.Values.batchUpdate(resource, spreadsheetId);
}