使用for循环中不同的递增步骤将粘贴的列从一张纸复制到另一张纸的行

时间:2019-07-01 06:03:15

标签: google-apps-script google-sheets

我有一张纸:'trainingmatrix',在第2行B,D,F,H列中包含信息... 我想将其粘贴到另一张“学习”列C的第2、3、4、5行中。...我尝试了下面的代码,但似乎不起作用...任何想法? for循环应该有问题,但这是我第一次使用两个变量和不同的递增步骤进行for循环。

  var trainingmatrix=ss.getSheetByName('Training Matrix');
  var vlearning=ss.getSheetByName('VLearning_Upload');

var lr=getlastrow(trainingmatrix,"A1:HA");

var tnavalues=trainingmatrix.getRange(1,1,lr-1,15).getValues();

var vlearnvalues=vlearning.getRange(1,1,vlearning.getLastRow(),
vlearning.getLastColumn()).getValues();

  for (var i=1 &&  j=1;i<vlearnvalues.length && j<vlearnvalues[0].length;i++ && j=j+2){


     vlearnvalues[i][2]=tnavalues[1][j];

    }



  Logger.log(values);```

2 个答案:

答案 0 :(得分:0)

尝试使用两个嵌套的“ for”循环使用两个变量循环。

for (var i = 1; i < vlearnvalues.length; i++) {
  for (var j = 1; j < vlearnvalues[0].length; j++) {
    vlearnvalues[i][2] = tnavalues[1][j];
  }
}

尽管我会确保变量(vlearnvalues,tnavalues)包含您认为的内容,方法是在循环遍历它们之前先对其进行记录,因为即使该循环正常运行,我也不确定您是否会实现所需的目标。

答案 1 :(得分:0)

我可以在您的代码中看到几个问题:

  1. 查找最后一行的语法错误。请通过var lr=getlastrow(trainingmatrix,"A1:HA");替换var lr = trainingmatrix.getLastRow();
  2. 正如camaulay所指出的那样,您不能在一个for循环中同时迭代i和j,而必须将“ j”循环嵌套在“ i”循环内。
  3. 考虑一下您在做什么:您正在使用vlearnvalues[0].length(为15)并尝试访问值tnavalues[1][j],如果Training Matrix中的范围宽度为比VLearning_Upload中更窄。
  4. 很遗憾,vlearnvalues[i][2]=tnavalues[1][j];在Apps脚本中不起作用。相反,您需要访问VLearning_Upload范围内的单个单元格,并使用函数setValue()Training Matrix范围内的值分配一个值。
  5. 如何选择只复制工作表Training Matrix中的某些值?您需要一个if语句。例如,假设B,D,F,H是非空列-并且您只想复制非空值,则可以实现:if(tnavalues[1][j]!="")

满足您要求的示例代码如下:

function Copy() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var trainingmatrix=ss.getSheetByName('Training Matrix');
  var vlearning=ss.getSheetByName('VLearning_Upload');
  var lr = trainingmatrix.getLastRow();  
  var tnavalues=trainingmatrix.getRange(1,1,lr-1,15).getValues();
  var vlearnvalues=vlearning.getRange(2,3,vlearning.getLastRow(),vlearning.getLastColumn());
  var array=[];
  for (var j=1; j<tnavalues[0].length; j++)
  {
    if(tnavalues[1][j]!="")
    {
      array.push(tnavalues[1][j])
    }
  }
  for(var i=1;i<vlearnvalues.getHeight();i++)
  {
    var cell=vlearnvalues.getCell(i,1);              
    if(typeof array[(i-1)]!=='undefined')
    {
      cell.setValue(array[(i-1)]); 
    }
  }
}

请参考Apps脚本参考以找到有关不同方法的更多信息以及如何使用它们的示例:

https://developers.google.com/apps-script/reference/