getRange,getDataRange和getActiveRange之间的区别?

如果这个问题没有立即显现,那么我对Google Apps脚本来说是相当新的。 我正在尝试编写一个Spreadsheets函数,该函数在工作簿中的表单提交表的每一行中运行,并使用for循环根据第一个单元格的值更新第二个表单/范围(在同一个工作簿中)。 但是,当我运行该function时,什么都不会发生。

我很确定这个错误是在我如何定义有问题的范围,但我不是100%确定的。 这是我写的一个修改版本:

function update() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var secondSheet = ss.getSheets()[1]; var submissionSheet = ss.getSheets()[0]; var secondRowEnd = secondSheet.getLastRow(); var submissionRowEnd = submissionSheet.getLastRow(); var secondColumnEnd = secondSheet.getLastColumn(); var submissionColumnEnd = submissionSheet.getLastColumn(); //used to define ranges dynamically var secondRange = secondSheet.getValues(); var submissionRange = submissionSheet.getValues(); for(var i = 2; i <= submissionRowEnd; i++) { var rock = secondRange.getCell(i, 1).getValue(); var paper = secondRange.getCell(i, 2).getValue(); var scissors = secondRange.getCell(i, 3).getValue(); var status = secondRange.getCell(i, 4).getValue(); var forStatus = secondRange.getCell(i, 5).getValue(); if (status === "Do X!") { for(var j = 2; j <= submissionRowEnd; j++) { var jrock = submissionRange.getCell(j, 1).getValue(); var jpaper = submissionRange.getCell(j, 2).getValue(); var jscissors = submissionRange.getCell(j, 3).getValue(); var jstatus = submissionRange.getCell(j, 4).getValue(); if (status === forStatus) { jrock.setValue(rock); jpaper.setValue(paper); jscissors.setValue(scissors); } else { /*do nothing*/ } } } } 

我一直在盯着几个星期这个代码稍微不同的版本,所以任何和所有的眼睛,将非常感激!

只需检出Spreadsheet Service的Apps Script API参考即可。 所有的function都logging在那里。 以下是您需要的方法描述的链接:

  • Spreadsheet.getActiveRange()
  • Sheet.getDataRange()

getRange()有多个实现。

  • Sheet.getRange(行,列)
  • Sheet.getRange(row,column,numRows)
  • Sheet.getRange(row,column,numRows,numColumns)
  • Sheet.getRange(a1notation)