button - 每次单击后按钮更改文本显示
问题描述
我是谷歌脚本的新手。你能帮我解决这个问题吗?我想在 googlesheet 中创建一个按钮,每次点击后都会显示一系列文本。(我不知道在脚本中放什么)
OPEN(绿色背景)--> CLICK--> CLOSE(红色背景)--> CLICK--> OPEN(绿色背景)...等等
先感谢您
解决方案
我相信你的目标如下。
- 您想要实现在 Google 电子表格上单击按钮时更改的按钮。
- 例如,当单击带有绿色和“OPEN”文本的按钮时,您希望将其更改为带有红色和“CLOSE”文本的按钮。
- 您想使用 Google Apps 脚本实现此目的。
问题和解决方法:
遗憾的是,在当前阶段,Google Apps Script 无法通过编辑文本和颜色直接管理 Google 电子表格上的绘图。因此,需要考虑实现目标的解决方法。在这个答案中,我想提出以下 3 种变通方法作为方法论。
解决方法 1:
在此解决方法中,图形用作按钮。当图形用作按钮时,准备了 2 个图形,并且两个图形都被覆盖。每个按钮分别具有 和 的button1
功能button2
。单击按钮时,将替换 z 索引。由此,可以实现切换按钮。因为在当前阶段,无法直接通过 Google Apps Script 编辑图像。
用法:
为了使用示例脚本,像上面的演示图像一样创建 2 个按钮作为图纸。
- 在这种情况下,请把两张图都包起来。
- 请为每个按钮分配 和 的功能
button1
。button2
将以下脚本复制并粘贴到电子表格的容器绑定脚本中并保存。
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(); }
单击按钮。这样,脚本就会运行并切换按钮。
笔记:
- 在这种情况下,为了刷新图纸z索引的变化,需要将焦点转移到其他图纸上。这样,当单击按钮时,按钮会立即闪烁。关于这一点,我想期待未来的更新。
解决方法 2:
在此模式中,绘图用作按钮。在这种情况下,还准备了2张图纸,一个按钮放在单元格“C3”,另一个放在同一张表中的其他位置(作为测试,按钮放在“E10”。)。每个按钮分别具有 和 的button1
功能button2
。当一个按钮被点击时,被点击的按钮被另一个位置的按钮替换。由此,可以实现切换按钮。
用法:
为了使用示例脚本,像上面的演示图像一样创建 2 个按钮作为图纸。
- 在这种情况下,请将一个按钮放在单元格“C3”,另一个放在另一个位置(作为测试,按钮放在“E10”。)在同一张表中。
- 请为每个按钮分配 和 的功能
button1
。button2
将以下脚本复制并粘贴到电子表格的容器绑定脚本中并保存。
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:
在此解决方法中,单元格用作按钮。当单元格用作按钮时,在这种情况下,使用单元格“C3”。OnSelectionChange 事件触发器用于执行脚本。
用法:
为了使用示例脚本,将“OPEN”文本和红色放在单元格“C3”中,如上图演示图像。
将以下脚本复制并粘贴到电子表格的容器绑定脚本中并保存。
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(); } }
单击单元格“C3”。这样,脚本就会运行并切换单元格的文本和颜色。
笔记
- 在这种情况下,为了再次选择按钮,需要改变选择的单元格。这是当前的规范。
笔记:
- 这些是简单的示例脚本。所以请根据您的实际情况修改它们。
参考:
推荐阅读
- clojure - 为什么 clojure (if-not) 宏调用 (not)?
- python - 无法在 Python 中启动 Redis Queue (RQ) worker
- python - Python重复我的代码很多次我想要
- javascript - 有没有更简洁的方法来获取错误和 Promise 的结果
- tensorflow - 在 tensorflow 1 中增强图像会导致有一个张量作为回报
- reactjs - 反应测试库在每个之前都不能使用
- java - 将多个数据从多个活动传输到一个活动 AndroidStudio?
- python - 尝试在 Google Colab 中加载泡菜文件时出错
- opengl - 如何从 OpenGL 中的 2D_Texture_Array 获取纹理数据?
- .net - 两个日期之间数据库中的记录数