【问题标题】:Increment Cell value by one by clicking通过单击将单元格值增加一
【发布时间】:2015-09-27 23:22:27
【问题描述】:

我想在 Google 表格中编写一个公式,以便我可以附加到一个按钮上,以使单元格中的值在每次单击时增加 1Here 是我在这个主题上能找到的最好的。

我试图这样做,但无济于事。我正在使用 Windows 7 和 Chrome。

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    首先创建一个脚本来增加单元格的值。例如,要将单元格“A1”增加一,以下脚本将起作用:

    function increment() {
      SpreadsheetApp.getActiveSheet().getRange('A1').setValue(SpreadsheetApp.getActiveSheet().getRange('A1').getValue() + 1);
    }
    

    保存此脚本并打开您的电子表格并按照以下步骤操作:

    • 转到“插入”>“绘图”并使用形状和文本绘制一个按钮。
    • 相应地定位您的按钮,然后右键单击它以显示一个 旁边的箭头。
    • 在下拉菜单中,选择“分配脚本”。并输入名称 你的功能。 (在本例中为“增量”)
    • 当你第一次点击它时,它会请求许可,但是 应该随后工作。

    【讨论】:

    • 这是针对特定单元格的,如果我们想为不同的行创建多个按钮并且每个按钮修改自己的行怎么办?有没有办法不手动创建?
    • @Marlon 如果您仍在寻找解决方案或更确切的解决方法,我发布了一个可能对您有用的答案。
    • 感谢您将其放在那里,但您遗漏了一个关键细节 - 我在哪里保存此功能。感谢您的指导。没有什么是显而易见的。
    【解决方案2】:

    2020 年更新

    动机:

    我想根据Marlon's评论提供一种不同的方法:

    如果我们想为不同的行和每行创建多个按钮怎么办? 按钮修改自己的行?有没有办法不手动创建?

    解决方案:

    您可以使用onSelectionChange 来捕获单次点击事件并模仿按钮的行为。

    • 当点击相同行的B列中的单元格时,以下脚本将增加列A中的单元格的值。

    • 它还会动态创建一个“按钮”文本,但这是可选的,由用户决定。

    要使用此解决方案,只需将其复制并粘贴到脚本编辑器并保存更改即可。之后,它将在单击事件时自动使用。在此解决方案中,我使用 Sheet1 作为工作表名称。

    function onSelectionChange(e) {
      const as = e.source.getActiveSheet();
      const col = e.range.getColumn();
      const row = e.range.getRow();
      if (as.getName() == 'Sheet1' && col == 2){ 
            const range = as.getRange(row,1);
            range.setValue(range.getValue()+1);
            e.range.setValue('Button');
      }
    }
    

    演示:

    限制:

    虽然这种方法效果很好,但有两个缺点:

    1. 点击和更新之间有一点延迟。

    2. 选择单元格时触发触发器。如果一个单元格已经被选中,如果您再次单击它,该功能将不会触发。您必须删除当前选择,然后再次选择它。

    【讨论】:

    • 我认为复选框+编辑触发方法会更好地模拟按钮。
    • @TheMaster 在我在这个答案中提出的场景中是的。但是,如果您在每个单元格中放置一个按钮图像,那么您可以获得更花哨的东西。您不仅限于复选框。但我同意,对于我展示的场景,onEdit 会更合适。
    • @soMario:我尝试使用脚本,但参数 e 未定义并生成错误消息“TypeError: Cannot read property 'source' of undefined信息”。脚本与绘图(按钮)绑定时无法设置此参数,所以我想知道它是从哪里来的。
    • @KalleSvensson 我建议你只用谷歌搜索这个错误信息。有 数百个 专门用于此的 stackoverflow 问题。然而,触发器并不意味着像您那样手动运行。在这种情况下,当您选择一个单元格时,它们会在用户操作时执行。我的回答本身也提到了这一点。还有一个视频解释了如何使用它。您在视频中看到我手动运行该功能了吗?
    • @soMario:你说得对,脚本在选择更改时起作用。您必须刷新工作表才能使其工作。我的工作表中没有刷新按钮,所以这很棘手。在您的第一个答案中,您将脚本分配给了绘图,所以我遵循了这个并遇到了问题。但是我使用 SpreadsheetApp 修改了脚本并删除了参数并且它也可以工作。
    【解决方案3】:

    将以下内容分配给工作表内的绘图,它将当前选定单元格的值增加 1:

    function plusOne() {
     
      var cell = SpreadsheetApp.getActiveSheet().getActiveCell();
      var value = cell.getValue() * 1;
      cell.setValue(value+1);
    }
    

    【讨论】:

      猜你喜欢
      • 2021-04-08
      • 1970-01-01
      • 1970-01-01
      • 2013-06-20
      • 1970-01-01
      • 2013-06-02
      • 1970-01-01
      • 2012-12-12
      • 1970-01-01
      相关资源
      最近更新 更多