假设我有一个脚本迭代400个对象的列表.每个对象具有1到10个属性.每个属性都是合理大小的字符串或稍大的整数.
将这些对象保存到ScriptDB与将它们保存到Spreadsheet(没有在一次批量操作中执行)的性能存在显着差异.
如何引用默认的"提交"表单按钮以将"onsubmit"触发器与另一个操作相关联?谢谢.
例如,使用onsubmit,
Logger.log('do something');
Run Code Online (Sandbox Code Playgroud) 在循环中使用UrlFetchApp.fetch时,有些URL比其他URL花费的时间更长并且失败.
有任何想法吗?
如何使用谷歌脚本永久删除谷歌驱动器上的文件我只找到方法setTrashed.它将文件移动到废纸篓,但如何永久删除文件
我一直使用insertText()函数,但现在我想在我的google文档中编写一个链接.理想的是能够用HTML编写,但我不知道如何...似乎使用insertText()函数是不可能的.
我怎样才能做到这一点 ?
制作一个网络应用程序,对我的 Google Drive 上的某些(表格)文件进行更改(即用户将像我一样使用该应用程序),但我想将网络应用程序访问权限限制为仅某些用户。部署应用程序时,我只能选择将其设为私有或公开。一种解决方案是使用会话类来查看是否有正确的用户登录。
function onAppBegin(){
if (Session.getActiveUser().getEmail() != "correctappuser@gmail.com") return null;
accessGranted();
}
Run Code Online (Sandbox Code Playgroud)
但是,我担心这种粗略的方法是否真的安全且不可破解?
我喜欢将Google表格与应用程序脚本一起使用,但在线脚本ide很麻烦(滞后等),并且没有桌面ide的许多便利。希望Google能够在某个时候开发出台式机。有人知道制作Google应用脚本的痛苦程度较小吗?是否有支持远程更新或发布Google脚本的好方法?
我正在 G Suite 中为我的公司开发一个内部应用。我在电子表格应用程序中使用了一个模态对话框。我找不到在 Drive for mobile 上执行此操作的方法,因此我决定将其部署为 Web 应用程序。我从来没有在应用程序脚本中使用过这个功能,所以我决定在将它应用到我的活动项目之前设置一个新项目来处理。我在项目中有两个文件;代码.gs
function doGet(e) {
return HtmlService
.createHtmlOutputFromFile('mainPage')
.setSandboxMode(HtmlService.SandboxMode.IFRAME);
}
Run Code Online (Sandbox Code Playgroud)
和 mainPage.html
<!DOCTYPE html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
</head>
<body>
<!-- Reference: http://getbootstrap.com/javascript/#tabs -->
<div role="tabpanel">
<!-- Nav tabs -->
<ul class="nav nav-tabs" role="tablist">
<li role="presentation" class="active"><a role="tab" data-toggle="tab" aria-controls="home" href="#home">Home</a>
</li>
<li role="presentation"><a role="tab" data-toggle="tab" aria-controls="profile" href="#profile">Profile</a>
</li>
<li role="presentation"><a role="tab" data-toggle="tab" aria-controls="messages" href="#messages">Messages</a>
</li>
<li role="presentation"><a role="tab" data-toggle="tab" aria-controls="settings" href="#settings">Settings</a>
</li>
</ul>
<!-- Tab panes -->
<div class="tab-content">
<div role="tabpanel" …Run Code Online (Sandbox Code Playgroud) 今天 Google Picker 在我的 Google Sheets 插件中停止工作,代码没有任何更改。模态对话中的错误内容如下:
无效的原始值。
控制台中的错误是:
无法在“DOMWindow”上执行“postMessage”:提供的目标源(“https://docs.google.com”)与收件人窗口的源(“https://n-a6p4dqsl***d6wq-0lu”)不匹配-script.googleusercontent.com')
丢弃 postMessage .. 来自意外的窗口
丢弃 postMessage .. 来自意外的窗口
加载“https://docs.google.com/picker?protocol=gadgets&origin=https%3A%2F%2Fdocs.google.com%2F&sdr=true&title&oauth_token=<oathToken>&developerKey=”时遇到无效的“X-Frame-Options”标头<developerKey>&hostId=n-a6p4dq***d6wq-0lu-script.googleusercontent.com&relayUrl=https%3A%2F%2Fn-a6p4dq***d6wq-0lu-script.googleusercontent.com%2Ffavicon.ico&nav=((% 22documents%22%2Cnull%2C%7B%22selectFolder%22%3Atrue%2C%22parent%22%3A%22root%22%7D)%2C(%22documents%22%2Cnull%2C%7B%22dr%22%3Atrue% 2C%22includeFolders%22%3Atrue%7D))&rpcService=qhurmoc5w4l7&rpctoken=xssf8g42xc2&thirdParty=true#rpctoken=xssf8g42xc2':'ALLOW-FROM https://docs.google.com/'不是公认的指令 标题将被忽略。
也许错误与我所做的这行代码有关setOrigin():
var picker = new google.picker.PickerBuilder()
.addView(driveView)
.addView(drivesView)
.hideTitleBar()
.setOAuthToken(token)
.setDeveloperKey(DEVELOPER_KEY)
.setCallback(pickerCallback)
--> .setOrigin(google.script.host.origin)
.setSize(DIALOG_DIMENSIONS.width - 2,
DIALOG_DIMENSIONS.height - 2)
.build();
Run Code Online (Sandbox Code Playgroud)
但这行代码直接来自 Google Picker API 的文档,并且之前工作正常。如果我更改google.script.host.origin,它会https://docs.google.com作为 url返回到https://n-a6p4dqsl***6wcd6wq-0lu-script.googleusercontent.com,我会收到相同的错误和一个新错误,所以不是这样。
我也无法将其添加为 GCP 项目中的授权 javascript 源,因为它返回以下错误:
无效的来源:使用了禁止的域
(这种情况已经有一段时间了)
这似乎是一个新错误,我无法在 Google 的问题跟踪器和 StackOverflow 上找到答案。
任何人都面临这个问题或知道如何处理它?
javascript google-apps-script google-picker google-cloud-platform
我一直在为我的公司开发一个应用程序脚本项目来跟踪我们的时间/费用。我已经像这样构建了项目:
这个设置对我们有大约 40 个用户来说效果很好。这种设置的缺点是,由于所有脚本活动都由公司帐户通过触发器运行,我们所有用户的活动都记录在单个公司帐户下,因此受到单个用户的应用程序脚本服务器配额的限制。只要我们的脚本运行效率高,这对我们来说还不是什么大问题。我已经考虑将这个项目部署为我们公司的网络应用程序,但似乎没有一个好的方法来控制/限制用户对中央文件的访问。换句话说,如果该项目作为由每个用户安装的 Web 应用程序运行,则每个用户都需要访问该项目在幕后使用的所有中央电子表格。我们不希望那样。
有了这样的背景,这是我的问题。我如何有效地跟踪应用程序脚本活动以查看我们离达到服务器配额有多近,并确定我的哪些功能需要优化?
每次调用脚本时,我都会通过在“活动日志”电子表格中写入一个条目来开始执行此操作。它跟踪调用了什么函数,用户是谁,它有一个开始时间条目和结束时间条目,所以我可以看到唯一的执行需要多长时间以及哪些失败。这很棒,因为我可以实时查看项目活动,并且可以使用电子表格图表工具绘制它。这开始崩溃的地方是脚本的每次执行都需要两个写操作:一个用于初始化,另一个用于完成。由于每次用户对其电子表格进行编辑时都会执行该脚本,因此在高流量期间,活动日志电子表格变得无法访问并且错误会到处抛出。
因此,我通过将每个脚本文件连接到单个 Google Cloud Platform (GCP) 项目并使用 Logger API 来过渡到跟踪活动。写入日志比向电子表格写入条目要高效得多,因此高流量错误几乎消失了。现在的问题是 GCP 日志浏览器不像电子表格那样易于使用,我无法绘制日志或总结活动以查看我们的服务器配额情况。
我现在花了一些时间试图弄清楚如何从 GCP 自动导出日志,以便我可以实时处理日志。我了解如何将日志下载为 csv 文件,然后我可以将其导入谷歌电子表格并进行我需要的计算和绘图,但这是一个手动过程,不显示实时数据。
我还想出了如何通过设置一个“接收器”将日志传输到理论上可以被其他服务读取的“存储桶”来从 GCP 流式传输日志。这让我兴奋地尝试使用 Google Data Studio,我看到它能够使用 Google Cloud Storage“存储桶”作为数据源。不幸的是,谷歌数据工作室只能读取云存储中的 csv 文件,而不能读取我的“接收器”在我的“存储桶”中为日志生成的 json 文件。
所以我撞墙了。我在这里错过了什么吗?我只是想获取显示我们应用程序脚本项目当前活动的实时数据,以便我可以识别失败的执行,查看总处理时间,并按用户或功能对日志进行排序,以便我可以快速确定需要优化脚本的位置。