getRange,getDataRange和getActiveRange之间的区别?

时间:2016-07-19 14:17:40

标签: javascript excel google-apps-script spreadsheet

如果问题没有立即显现,我对Google Apps脚本很陌生。我正在尝试编写一个Spreadsheets函数,该函数遍历工作簿中表单提交表的每一行,并根据第一个使用for循环中单元格的值更新第二个工作表/范围(在同一工作簿中)。但是,当我运行该功能时没有任何反应。

我很确定错误在于我如何定义相关范围,但我不是百分百肯定。这是我写过的修改版本:

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*/ }
      }
    }
  }

我几周以来一直盯着这个代码略有不同的版本,所以任何和所有人都会非常感激!

3 个答案:

答案 0 :(得分:3)

只需查看Spreadsheet Service的Apps Script API参考。所有功能都记录在那里。以下是您需要的方法说明的链接:

getRange()有多个实现。

答案 1 :(得分:2)

Sheet.getDataRange()相比,Sheet.getRange()的使用产生了更快的响应时间,因为Sheet.getDataRange()返回了数据数组

希望有帮助(HTH)

答案 2 :(得分:0)

您在gdrive中的电子表格会与您在getRange().getValue()中使用的Google Apps脚本中的函数进行通讯。 也就是说,作为数据的单元格数量可能是一百次或更多。

function update() {var ss = SpreadsheetApp.getActiveSpreadsheet();
var secondSheet=ss.getSheets()[1];var submissionSheet = ss.getSheets()[0];
var secondRowEnd=secondSheet.getLastRow();
var data = submissionSheet.getDataRange();//here is all 
datasecondSheet.getRange(secondRowEnd).setValue(data.map(function (x){return 
x=data.filter( function (){blabla})}))}