1

我注意到如果没有经验的用户在输入新值后突出显示输入单元格,则 google sheet 脚本无法正确执行。

这可以通过单击键盘上的 ENTER 键或其他键,然后运行脚本来手动解决;所以我想一种方法是模仿键盘输入,但我不确定是否有更好的解决方案。

例如,我希望脚本在执行测试乘法函数之前和之后执行“ENTER”键,如下面的测试表所示: https ://docs.google.com/spreadsheets/d/1TMjakai_5b_UHhXHSu3TWJeI7saAeQd64H6WYWDNHfE /edit?usp=共享

我用于测试的脚本如下:

    function Test() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var formS = ss.getSheetByName("Data"); 
    var y = formS.getRange("A3").getValue();
    var z = formS.getRange("B3").getValue();
    var x = y * z;
    formS.getRange("E3").setValue(x);
  }

任何人都可以在 google sheet 上尝试:只需单击(一次或两次)单元格 A3 或 B3,使它们突出显示,然后单击按钮执行脚本。如果不单击单元格外部或通过键盘使用 ENTER,脚本将不会记录新输入的值。

有更好的方法吗?

4

2 回答 2

0

在您按下回车键或单击另一个单元格之前,单元格值不会更新(请参阅编辑和格式化电子表格):

编辑单元格中的数据:

  1. 在 Google 表格中打开电子表格。
  2. 单击一个空的单元格,或双击一个非空的单元格。
  3. 开始打字。
  4. 可选:要在单元格中添加另一行,请在 Mac 上按 ⌘ + Enter 或在 Windows 上按 Ctrl + Enter。
  5. 完成后,按Enter

附加按钮不能用于强制此单元格更新,因此通过可点击图像/绘图调用的脚本不会包含此信息。

因此,我建议不要通过附加按钮触发您的功能,而是使用以下方法之一:

  • 通过onEdit触发器调用它(在用户按下回车键或单击另一个单元格并更新单元格之前,它不会被调用)。
  • 通过自定义菜单调用它(单击菜单项时将更新单元格)。

这样,您将确保执行的函数适用于更新的值。

有关的:

于 2021-03-15T14:45:08.290 回答
0

虽然我无法重现您的问题(请参阅附件 gif)。

可能有两个潜在的问题。

您需要刷新更改:

function Test() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var formS = ss.getSheetByName("Data"); 
    var y = formS.getRange("A3").getValue();
    var z = formS.getRange("B3").getValue();
    var x = y * z;
    SpreadsheetApp.flush();
    formS.getRange("E3").setValue(x);
}

或者您误解了脚本的输出。

即,单击按钮一次后,5*44会给出220. 因此,如果您再次按下它,结果 ( 220) 根本不会改变,因为 的结果 5*44将始终相同。

基于您的代码的插图:

在此处输入图像描述

于 2021-03-13T21:07:59.317 回答