首页 > 解决方案 > 每次单击后按钮更改文本显示

问题描述

我是谷歌脚本的新手。你能帮我解决这个问题吗?我想在 googlesheet 中创建一个按钮,每次点击后都会显示一系列文本。(我不知道在脚本中放什么)

OPEN(绿色背景)--> CLICK--> CLOSE(红色背景)--> CLICK--> OPEN(绿色背景)...等等

先感谢您

标签: buttongoogle-apps-scriptgoogle-sheets

解决方案


我相信你的目标如下。

  • 您想要实现在 Google 电子表格上单击按钮时更改的按钮。
    • 例如,当单击带有绿色和“OPEN”文本的按钮时,您希望将其更改为带有红色和“CLOSE”文本的按钮。
  • 您想使用 Google Apps 脚本实现此目的。

问题和解决方法:

遗憾的是,在当前阶段,Google Apps Script 无法通过编辑文本和颜色直接管理 Google 电子表格上的绘图。因此,需要考虑实现目标的解决方法。在这个答案中,我想提出以下 3 种变通方法作为方法论。

解决方法 1:

在此解决方法中,图形用作按钮。当图形用作按钮时,准备了 2 个图形,并且两个图形都被覆盖。每个按钮分别具有 和 的button1功能button2。单击按钮时,将替换 z 索引。由此,可以实现切换按钮。因为在当前阶段,无法直接通过 Google Apps Script 编辑图像。

在此处输入图像描述

用法:

  1. 为了使用示例脚本,像上面的演示图像一样创建 2 个按钮作为图纸。

    • 在这种情况下,请把两张图都包起来。
    • 请为每个按钮分配 和 的功能button1button2
  2. 将以下脚本复制并粘贴到电子表格的容器绑定脚本中并保存。

     const button1 = () => switching("button1");
     const button2 = () => switching("button2");
    
     function switching(name) {
       const ss = SpreadsheetApp.getActiveSpreadsheet();
       const sheet = ss.getActiveSheet();
       const drawings = sheet.getDrawings();
       drawings.forEach(d => d.setZIndex(d.getOnAction() == name ? 0 : 1));
       const temp = ss.insertSheet();
       SpreadsheetApp.flush();
       ss.deleteSheet(temp);
       sheet.activate();
     }
    
  3. 单击按钮。这样,脚本就会运行并切换按钮。

笔记:

  • 在这种情况下,为了刷新图纸z索引的变化,需要将焦点转移到其他图纸上。这样,当单击按钮时,按钮会立即闪烁。关于这一点,我想期待未来的更新。

解决方法 2:

在此模式中,绘图用作按钮。在这种情况下,还准备了2张图纸,一个按钮放在单元格“C3”,另一个放在同一张表中的其他位置(作为测试,按钮放在“E10”。)。每个按钮分别具有 和 的button1功能button2。当一个按钮被点击时,被点击的按钮被另一个位置的按钮替换。由此,可以实现切换按钮。

在此处输入图像描述

用法:

  1. 为了使用示例脚本,像上面的演示图像一样创建 2 个按钮作为图纸。

    • 在这种情况下,请将一个按钮放在单元格“C3”,另一个放在另一个位置(作为测试,按钮放在“E10”。)在同一张表中。
    • 请为每个按钮分配 和 的功能button1button2
  2. 将以下脚本复制并粘贴到电子表格的容器绑定脚本中并保存。

     const button1 = () => switching("button1");
     const button2 = () => switching("button2");
    
     function switching(name) {
       const ss = SpreadsheetApp.getActiveSpreadsheet();
       const sheet = ss.getActiveSheet();
       const drawings = sheet.getDrawings();
       if (drawings[0].getOnAction() == name) {
         drawings[1].setPosition(3, 3, 0, 0);
         drawings[0].setPosition(10, 5, 0, 0);
       } else {
         drawings[0].setPosition(3, 3, 0, 0);
         drawings[1].setPosition(10, 5, 0, 0);
       }
     }
    
  3. 单击按钮。这样,脚本就会运行并切换按钮。

笔记

  • 在这种情况下,不需要通过聚焦到其他工作表来刷新。但是,需要将另一个按钮放在同一张纸上。

解决方法 3:

在此解决方法中,单元格用作按钮。当单元格用作按钮时,在这种情况下,使用单元格“C3”。OnSelectionChange 事件触发器用于执行脚本。

在此处输入图像描述

用法:

  1. 为了使用示例脚本,将“OPEN”文本和红色放在单元格“C3”中,如上图演示图像。

  2. 将以下脚本复制并粘贴到电子表格的容器绑定脚本中并保存。

     function onSelectionChange(e) {
       const range = e.range;
       const sheet = range.getSheet();
       const a1Notation = range.getA1Notation();
       if (a1Notation == "C3") {
         if (range.getValue() == "OPEN") {
           range.setBackground("#ff0000");
           range.setValue("CLOSE");
         } else {
           range.setBackground("#38761d");
           range.setValue("OPEN");
         }
         sheet.getRange("A1").activate();
       }
     }
    
  3. 单击单元格“C3”。这样,脚本就会运行并切换单元格的文本和颜色。

笔记

  • 在这种情况下,为了再次选择按钮,需要改变选择的单元格。这是当前的规范。

笔记:

  • 这些是简单的示例脚本。所以请根据您的实际情况修改它们。

参考:


推荐阅读