.getDataRange不是.setFormula之后的真实范围

时间:2014-11-14 17:37:04

标签: google-apps-script google-sheets

我有一个功能:

  1. 找到工作表中的最后一行
  2. 在该表中插入查询 最后一行加一个工作正常,并附加新记录 (使用setFormula),
  3. 执行电子表格应用程序刷新以强制所有 等待更新的更新因此可以获得实时范围,所以我 想到!
  4. 这是问题所在: 我想从新的结果范围中获取值并将值粘贴回来;但是.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即使在刷新之后也不准确,甚至在声明新变量以获得工作表和范围之后。

    有什么想法吗?

1 个答案:

答案 0 :(得分:0)

试图以这种方式实施它,它对我来说很有效。

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();'。

希望有所帮助!!