标签: google-apps-script

调试由发布请求触发的 Google Apps 脚本?

我在 Google Sheets 中有一个简单的脚本,它由 Slack 中的命令触发,只是将 Slack 消息添加为新行。这是一个非常简单的功能,部署为 Web 应用程序并且可以正常工作:

function doPost(req) {
var sheet = SpreadsheetApp.openById('[My Sheet Id]');
var params = req.parameters;

Logger.log(params.text);

sheet.appendRow(params.text);

return ContentService.createTextOutput("Saved your entry:" + params.text);
}
Run Code Online (Sandbox Code Playgroud)

然而,Logger.log 函数从不在调试日志中记录任何内容。我希望它在这里:

在此处输入图片说明

奇怪的是,执行列表也是空的:

在此处输入图片说明

但是脚本正在被触发并将文本消息附加到 Google 表格中。

所以我想的问题归结为当由发布请求触发时,我如何从脚本(部署为 Web 应用程序)中准确登录,以及如何查看它的执行情况?换句话说,您如何调试此类脚本?

google-apps google-apps-script

1
推荐指数
1
解决办法
2254
查看次数

如何使用 Google Apps Script webapp 发送延迟响应(Slack api)?

我们有一个处理 Slack 斜杠命令的小型 Google Apps Script webapp。它直接从 Slack 执行一些方便的操作,例如向我们的工作表添加、更新和查询记录。大多数时候一切正常。但是,Slack API 需要在不到 3 秒的时间内收到请求的答复,否则它将超时。我们的 Google Apps 脚本并不总是能够在那个时间范围内做出响应,随着我们的工作表增长或我们的查询变得更加复杂,这种情况只会变得更糟。

Slack API 允许使用延迟响应的异步调用,但这意味着 Google Apps 脚本需要立即响应(在 3 秒内)并在后台执行一些工作。

现在这是问题

我不知道如何在 Google Apps Script 中进行异步调用

我知道 Google Apps Script 不支持 Workers 并且我下面的解决方案因为ReferenceError: 'google' is not defined碰壁。(只需忽略 Payload 类,它会格式化 Slack 响应)

function doPost(request) {
  var responseUrl = request.parameter.response_url

  // This is how I try to circumvent the lack of threads in Google Apps Script
  google.script.run

  // Send an asynchronous slack response with result
  .withSuccessHandler(function(payload) …
Run Code Online (Sandbox Code Playgroud)

asynchronous google-apps-script slack-api

1
推荐指数
1
解决办法
895
查看次数

环聊机器人如何在卡片消息中@提及用户

我创建了一个机器人,它应该通知一个组中的用户他们被分配到的任务。它与使用的简单消息配合良好,但一旦放入卡片消息中就无法正常工作 - 我得到了“---”或“???” 而不是提及。我试图将它放在不同的小部件中:keyValue、textParagrap 或 header,但它没有改变任何东西。有谁知道这是否可能?

google-apps-script hangout hangouts-chat google-chat

1
推荐指数
1
解决办法
2307
查看次数

多种形式,一个项目

我希望能够在 Web App Google Apps 脚本中单击 main.html 表单上的按钮以转到另一个 html 页面。

但是我如何使用 doGet() 函数来实现这一点:

function doGet() {
  var clientss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/P4ZgBlgYZYHH8Ga3HHs/edit#gid=0");
  var clientws=clientss.getSheetByName("Clients");
  var htpage=HtmlService.createTemplateFromFile("NewJob");
  var clientlist = clientws.getRange(2,1,clientws.getRange("A2").getDataRegion().getLastRow(),5).getValues();
  htpage.clientlist=clientlist.map(function(r) {return r[0];});
  return htpage.evaluate(); 
}
Run Code Online (Sandbox Code Playgroud)

web-applications google-apps-script

1
推荐指数
1
解决办法
443
查看次数

Apps 脚本拒绝连接

我正在尝试学习 Apps Script 和一些前端网络开发人员。我在 Apps Script 中编写了一些代码,并尝试在 Google 站点中呈现它。

这是我在 Apps 脚本中使用的 doGet 函数:

function doGet() {
  var template = HtmlService.createTemplateFromFile('Index');
  return template.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME);
}
Run Code Online (Sandbox Code Playgroud)

有趣的是,当我使用 Google 提供的 URL 时,脚本会自行呈现:https : //sites.google.com/corp/view/vrajlinkshortener

但是,当我输入自定义域时,情况并非如此:www.wharton.ml

我检查了文档,但仍然无法弄清楚为什么自定义域会禁止 Apps 脚本表单工作。

有小费吗?谢谢!

google-sites google-apps-script

1
推荐指数
1
解决办法
3375
查看次数

在 Google Apps 脚本对话框内显示 PDF 查看器

我想在 Google 电子表格插件对话框的对话框中显示 PDF。

可以在此处找到有关应用程序脚本对话框的更多信息

https://developers.google.com/apps-script/guides/html/

<iframe id="iframe" src="https://www.w3docs.com/uploads/media/default/0001/01/540cb75550adf33f281f29132dddd14fded85bfc.pdf"  frameborder="0" height="500px" width="100%"></iframe>
Run Code Online (Sandbox Code Playgroud)

当我检查时,我看到消息Resource 被解释为 Document 但使用 MIME 类型 application/pdf 传输:“ https://www.w3docs.com/uploads/media/default/0001/01/540cb75550adf33f281f29132dddd14fded85bfc.pdf ”。

html javascript google-apps-script google-apps-script-addon

1
推荐指数
1
解决办法
1135
查看次数

Google Script Document Inaccessible Error - 创建并尝试在代码中打开文档

我有一些旧代码,在 5 年前使用 Google 表单并根据信息填写预先设计的模板时效果很好。我已经有一段时间不需要使用它了,但现在我有一个类似的项目,并试图振兴过时的代码。我有一个错误,我无法弄清楚或在网上找到答案。请帮忙!

代码的相关部分是:

//创建模板副本

  var copy = DriveApp.getFileById(docTemplate)
            .makeCopy(docName+' TEST ')
            .getId();
Run Code Online (Sandbox Code Playgroud)

// 打开临时文件

  var copyDoc = DocumentApp.openById(copy);
Run Code Online (Sandbox Code Playgroud)

第一部分有效,在我的 Google Drive 中创建文档副本,var copy 返回新文档 ID 的值。

我收到错误消息“文档无法访问。请稍后再试。(第 79 行,文件“代码”)”

代码的第 79 行是:“var copyDoc = DocumentApp.openById(copy);”。

我尝试了几种不同的打开文件的代码,它们都返回相同的错误消息。

google-docs google-apps-script google-drive-api

1
推荐指数
2
解决办法
2195
查看次数

试图让 Google 电子表格自动滚动到底部填充的行。尝试了代码但收到错误

我有从这个问题中获取的以下代码。我试图让我的 400 多行 Google 工作表在打开时自动滚动到工作表的底部,而不是第一行。我收到第 2 行代码的错误。

类型错误:无法从未定义中读取属性“源”。(第 2 行,文件“代码”)

我有一种感觉,因为我的电子表格上有多个选项卡,但我不太了解代码来修复它。我希望它只在第一个选项卡上工作。

    function onOpen(e) {
      var spreadsheet = e.source;
      var sheet = spreadsheet.getActiveSheet();
      var lastRow = spreadsheet.getLastRow();
    /*  if (sheet.getMaxRows() == lastRow) {
        sheet.appendRow([""]);
      }
      lastRow = lastRow + 1;
      */
      var range = sheet.getRange("A" + lastRow + ":A" + lastRow);
      sheet.setActiveRange(range);
    }
Run Code Online (Sandbox Code Playgroud)

google-sheets autoscroll google-apps-script

1
推荐指数
1
解决办法
5028
查看次数

使用谷歌脚本将谷歌电子表格的范围获取到图像中

我正在构建一个搜索工具,通过它可以使用谷歌脚本将谷歌范围转换为图像。我尝试将该数据范围粘贴到谷歌幻灯片,然后从那里获得缩略图及其网址。我正在搜索任何其他工具,这些工具可以直接为我提供 Google 表格所选范围的图像网址。

谢谢

google-apps-script

1
推荐指数
1
解决办法
5087
查看次数

函数 NOW() + 设置时区(谷歌表格)

我住在巴西(UTC 偏移量为 - 3:00),在这里我们有一种叫做夏令时的东西,在一年中的某些时候,时钟会提前 1 小时。

发生的事情是我有一个完整的电子表格准备过滤英格兰时区的数据。

我今天遇到了一个大问题,因为 Google 的时代变了,我的数据被错误地过滤了。

我在脚本中的原始公式是:

spreadsheet.getCurrentCell().setFormula('=text(now()+"5:00","yyyy/mm/dd hh:mm")');

现在几个小时后,我意识到失败并需要切换到:

spreadsheet.getCurrentCell().setFormula('=text(now()+"4:00","yyyy/mm/dd hh:mm")');

为了不再发生这种情况,我想知道如何在 NOW () 函数中添加英格兰时区。

我试过:

spreadsheet.getCurrentCell().setFormula('=text(now("UK"),"yyyy/mm/dd hh:mm")');

但是没能回来。我每 1 分钟使用一个触发器来更新电子表格中的时间,我想知道我可以做些什么来解决这个问题。

详细信息:我可以在电子表格设置中更改时间,但我需要将其保存为当地时间。

timezone google-sheets dst google-apps-script google-sheets-formula

1
推荐指数
1
解决办法
5127
查看次数