迭代一个范围并设置值

时间:2017-04-21 22:24:50

标签: google-apps-script google-sheets

在Google表格中,我在提示用户输入该范围内的起始范围和行数后,尝试按顺序输入数字。如果用户键入单元格" C5"例如,输入5行,结果应该是来自单元格C5 - C10(1,2,3,4,5)

我找到了一种在所有行中输入相同值的方法,但我似乎无法遍历用户提供的范围并在每个单元格中设置不同的值。

function placeInCell() {
   var mySheet = SpreadsheetApp.getActiveSpreadsheet();
   var sheet = mySheet.getSheetByName('Second');

   var ui = SpreadsheetApp.getUi();
   var result = ui.prompt('What cell to start with?', 
                                    ui.ButtonSet.OK);
   var result2 = ui.prompt('How many cells?', ui.ButtonSet.OK);

   // Process the user's response.
   var button = result.getSelectedButton();
   var cell = result.getResponseText();

   var button2 = result2.getSelectedButton();
   var numCells = result2.getResponseText();

   var cellRange = sheet.getRange(cell); 
   cellRange = cellRange.offset(0, 0, numCells);

   //iterate through the range given by the user and set values 
   //in each row
   for (var i = 0; i < numCells; i++){
      cellRange.setValue(i);
   };
}

1 个答案:

答案 0 :(得分:1)

在Google Apps脚本中,范围使用索引1..n进行处理,与0..n-1不同,例如数组。 此外,无法使用[]像数组一样处理范围:您需要使用offset等方法。 这就是为什么,正如您所评论的那样,“ cellRange [i] [0] .setValue(i)抛出错误。它表示cellRange [i] [0]未定义”。

尝试@ SpiderPig的解决方案,它应该适合你。它使用一般的良好做法或最小化服务器端调用的数量,例如getRangesetValueoffset,而不是在数组上本地(客户端)工作:首先使用myRange .getValues,然后处理你的数组,最后是myRange.setValues。