Google表格脚本getValue不在UI中获得值(最新计算)

时间:2019-04-21 22:08:39

标签: javascript google-sheets google-sheets-api

我正在编写一个简单的脚本,该脚本基本上读取一个值,并在单击按钮时将其发送到另一张表。为了测试目的,我写道:

SpreadsheetApp.flush()
var sheet = localSheet.getSheetByName('Input');
var dateTimeRange = sheet.getRange(2,2);
var dateTimeValue = dateTimeRange.getDisplayValue();  
localSheet.toast(readingValue, dataTypeValue)

在电子表格设置中,我设置了: 文件->电子表格设置->计算->每分钟更改一次

2,2范围内的单元格具有

=now()

因此,每隔2分钟,单元格2,2中的值就会重新计算一次。 但是,当我运行脚本时,看到的输出值始终是我上次修改工作表的值。只要我不与工作表交互,脚本就无法读取新值。我尝试添加flush(),不起作用。有人知道吗

谢谢。

1 个答案:

答案 0 :(得分:0)

我认为您遇到问题的原因是未更新工作表。不幸的是,不能使用flush()。为了避免此问题,以下解决方法如何?请认为这只是几个答案之一。

根据您的情况,在编辑工作表时,将更新getDisplayValue()检索的值。在此答案中,将使用它。

解决方法1:

在此替代方法中,单元格“ B2”被=NOW()覆盖。

修改后的脚本:

var localSheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = localSheet.getSheetByName('Input');
var dateTimeRange = sheet.getRange(2, 2);
var dateTimeValue = dateTimeRange.setFormula("=NOW()").getDisplayValue(); // Modified
localSheet.toast(dateTimeValue);

解决方法2:

在此替代方法中,将清除一个空单元格。在示例脚本中,单元格“ B3”假定为空,并且该单元格与主数据无关。该单元格已清除。这样,让Spreadsheet知道工作表已被编辑。

修改后的脚本:

var localSheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = localSheet.getSheetByName('Input');
var dateTimeRange = sheet.getRange(2, 2);
sheet.getRange("B3").clear(); // Added
var dateTimeValue = dateTimeRange.getDisplayValue();
localSheet.toast(dateTimeValue);
  • 即使已编辑的单元格与主表不同,“输入”表上“ B2”的值也会更新。因此,您也可以使用localSheet.getSheetByName("Sheet1").getRange("A1").clear()代替sheet.getRange("B3").clear()

注意:

  • 您的脚本似乎不是最新的。
    • localSheet var localSheet = SpreadsheetApp.getActiveSpreadsheet()吗?
    • 未声明
    • readingValuedataTypeValue。在此答案中,使用dateTimeValue
  • 在上述解决方法中,值已更新。但是,检索到的值每次都会显示4到5秒的值。关于这一点,我找不到与“ B2”相同的值。对于这种情况,我表示歉意。

如果这对您的情况没有帮助,我深表歉意。