我在 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 应用程序)中准确登录,以及如何查看它的执行情况?换句话说,您如何调试此类脚本?
我们有一个处理 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) 我创建了一个机器人,它应该通知一个组中的用户他们被分配到的任务。它与使用的简单消息配合良好,但一旦放入卡片消息中就无法正常工作 - 我得到了“---”或“???” 而不是提及。我试图将它放在不同的小部件中:keyValue、textParagrap 或 header,但它没有改变任何东西。有谁知道这是否可能?
我希望能够在 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) 我正在尝试学习 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 电子表格插件对话框的对话框中显示 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 ”。
我有一些旧代码,在 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);”。
我尝试了几种不同的打开文件的代码,它们都返回相同的错误消息。
我有从这个问题中获取的以下代码。我试图让我的 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 表格所选范围的图像网址。
谢谢
我住在巴西(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
asynchronous ×1
autoscroll ×1
dst ×1
google-apps ×1
google-chat ×1
google-docs ×1
google-sites ×1
hangout ×1
html ×1
javascript ×1
slack-api ×1
timezone ×1