我有一个Google表格,其中包含单击按钮时应运行的脚本。推荐的方法(据我所知)是插入图像,然后将脚本附加到有问题的图像。

只要我在桌面上打开工作表,它就可以正常工作。但是,如果我在Android Google表格应用中打开表格,则该图像根本不会出现。据我所知,这种行为(缺乏)在任何地方都没有记录,但是我发现很多人都遇到同样的问题。

我想知道如何解决这个问题。我是否错过了一些显而易见的事情,这些事情会使我的图像在Android应用程序中可见?还是有另一种简单的方法可以将脚本触发器添加到可在移动设备上工作的工作表中?

评论

这确实是Android的原生Sheets应用程序存在的问题,不是吗?您的问题可能对Android爱好者来说更好。

@AlE。这是一种查看方法,但是要解决此问题,需要Google表格知识,而不是Android知识。

@Normal:这就是为什么我问这个问题(并且没有投票关闭)。我只是想帮助Asker吸引获得答案所需的专家。

#1 楼

目前,在Sheets Android应用中似乎无法使用图片或自定义菜单项。我建议在电子表格中创建一个“功能菜单”。例如:


单元格A1说“选择功能”
单元格B1有一个数据验证规则,该规则将内容限制为您拥有的功能名称。在我的示例中,它们是“ insertSomething”和“ convertSomething”。 (不要在数据验证对话框中选中“显示帮助”,“帮助”弹出窗口在移动设备上很麻烦。)
脚本函数onEdit(简单触发器)在每次编辑时运行,检查B1的内容是否已经改变。如果是这样,它将运行适当的功能。

这是我的代码,其中包括两个用于演示的函数:

function onEdit(e) {
  if (e.range.getA1Notation() == 'B1') {
    if (/^\w+$/.test(e.value)) {        
      this[e.value]();
      e.range.clear();
    }
  }
}

function insertSomething() { 
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.getRange(2,3).setValue('inserted something');
}  

function convertSomething() { 
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.getRange(3,3).setValue('converted something');
}  


条件/^\w+$/.test(e.value)只是为了检查我们是否有非空字符串并且没有执行有人以某种方式放入单元格B1中的恶意代码。在使用this[e.value]();调用功能后(this引用全局对象并包含函数名称),将清除B1的内容。一个可以选择再次运行相同的功能,也可以选择另一个。

作为概念证明,以下是该应用的屏幕截图。屏幕截图1:选择一个函数



屏幕截图2:该函数运行后



参考


https://developers.google.com/apps-script/guides/sheets
https://developers.google.com/apps-script/guides/triggers


评论


只要不使用被调用的函数来发送电子邮件,此方法就起作用。电子邮件无法由编辑侦听器触发,因此按钮/自定义菜单问题确实很有限。

– 10klines
17年6月13日在11:52

@ 10klines在这种情况下,将简单的onEdit触发器更改为可安装的触发器,该触发器将在安装触发器的用户授权下运行。

–user135384
17年8月2日在21:53



如果需要,可以使用复选框来触发功能,而不是图片或数据验证。对于我的平板电脑,评估功能无法正常工作,因此我为每个功能设置了许多复选框。我相应地调整了代码,并且工作正常。提示:如果您有平板电脑,请不要使用“消息框”-由于某些原因而无法使用。

– Tobias Sarnow
19年1月30日在6:26

这是一个不错的解决方案,但是如果调用该函数进行API调用并从中获取响应(因为它正在请求Google批准),则该方法不起作用。有没有解决的办法?

– J.B.
19-10-4在11:01

@ J.B。使用可安装的编辑触发器

–TheMaster
20 Mar 3 '20 at 21:07