简单嵌套的循环问题

时间:2018-04-19 08:27:45

标签: for-loop google-apps-script

我是编程的新手,我正在尝试在Google工作表上创建一个短宏。我想根据变量see here复制并粘贴一定数量的单元格列表。在第一列中,您有一个位置列表,第二列是它们应该粘贴到第三列的列表(列F)。例如,我想将A4粘贴五次到F4列。然后A5两次进入F8(F4 + 5行),所以一直到我的列表结束。

我想出了下面的代码,但它目前在同一行(F4-F8)上复制了我的列表的每个位置5次,然后在接下来的5行重复相同的过程,依此类推。我认为问题在于循环的顺序,但我无法弄明白。

我遇到的另一个问题是它只复制每个位置5次(B1),但我不知道如何使我的变量numShift成为(B4-B16)的数组,以便每个位置被复制正确的次数

任何帮助都会非常感激!

function myFunction() {
var app = SpreadsheetApp;
var ss = app.getActiveSpreadsheet()
var activeSheet = ss.getActiveSheet()
var numShift = activeSheet.getRange(4,2).getValue()
for (var k=0;k<65;k=k+5){
for (var indexNumLocation=0;indexNumLocation<15;indexNumLocation++){
for (var indexNumShift=0;indexNumShift<numShift;indexNumShift++)    
{var locationRange = activeSheet.getRange(4+indexNumLocation,1).getValue();  
activeSheet.getRange(4+k+indexNumShift,6).setValue(locationRange); 
}
}
}
}

1 个答案:

答案 0 :(得分:1)

试试这个

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var lastRow = sheet.getLastRow();
  var data = [];
  var i, j;
  // get times count for each row from B4 to last row
  var times = sheet.getRange(4, 2, lastRow - 4, 1).getValues();
  // get the data that needs to be copied for each row from A4 to last row
  var values = sheet.getRange(4, 1, lastRow - 4, 1).getValues();
  // loop over each row
  for (i = 4; i <= lastRow; i++) {
    // run loop number of times for that row
    for (j = 1; j <= times[i]; j++) {
      // push the value that needs to be copied in a temporary array
      data.push([values[i][0]]);
    }
  }
  // finally put that array data in sheet starting from F4
  sheet.getRange(4, 6, data.length, 1).setValues(data);
}