【问题标题】:.getDataRange not the true range after a .setFormula.getDataRange 不是 .setFormula 之后的真实范围
【发布时间】:2014-11-14 17:37:04
【问题描述】:

我有一个函数:

  1. 在工作表中查找最后一行,
  2. 在该工作表中插入查询 最后一行加一个工作正常并附加新记录 (使用 setFormula),
  3. 执行电子表格应用程序刷新以强制所有 等待更新的更改,以便之后可以获得可靠的范围,所以我 想!

这是问题所在: 我想从新的结果范围中获取值并将值粘贴回;但是 .getDataRange 返回原始的 .dataRange 而不是新的。

`//get new ranges after formula run
var SheetNow = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("New Records");
var rangeNow = SheetNow.getDataRange();
var recordsNow = RangeNow.getValues();
rangeNow.setValues(recordsNow);`

这不起作用,因为它只获取函数运行时的原始数据范围,并且不会反映插入公式添加的新记录所产生的更大范围。

我很困惑为什么 getDataRange 不准确,即使在刷新之后,甚至在声明新变量以获取工作表和范围之后。

有什么想法吗?

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    尝试以这种方式实现它,它对我来说效果很好。

    function getNewFormulaRange(){
      var sheet = SpreadsheetApp.getActiveSheet();
      var last_row = sheet.getLastRow();
      var last_column = sheet.getLastColumn();
      Logger.log('1: ' + last_row);
      var range_input = sheet.getRange(1,1,last_row,last_column);
      var cell = sheet.getRange(last_row+1,10);
      cell.setFormula("=SUM(B3:B4)");
      SpreadsheetApp.flush();
      var last_row = sheet.getLastRow();
      var last_column = sheet.getLastColumn();
      var new_range = sheet.getDataRange();
      Logger.log(new_range.getLastColumn());
      Logger.log(last_row);
      Logger.log(' col: ' + last_column);
    }
    

    我还看到您在 'var recordsNow = RangeNow.getValues();' 处提供的代码中有错字相反,它应该是 'var recordsNow = rangeNow.getValues();'。

    希望有帮助!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-14
      • 2012-04-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-17
      • 1970-01-01
      相关资源
      最近更新 更多