使用Google App脚本和Javascript,我设法检索xls Gmail附件,将其转换为Google工作表,向某些收件人发送警告电子邮件,在添加新附件时插入带有Google云端硬盘文件夹链接的活动最后,我使用一个独立的脚本来管理来自此类xls文件的一些数据,这些数据转换为主Google表单,其中一个运营商正在使用h24(更新一些数据以便稍后转发并在服务期间转发)。 独立脚本每30分钟运行一次,以检查传入的邮件(第二天或几天的日程安排),当它找到它时,它会执行代码。 到目前为止,锁定服务在独立脚本上不可用,因此我无法锁定文档,因此我希望向用户显示脚本即将运行而不编辑任何内容的消息,因为其他脚本绑定到电子表格是使用Lock服务,结果可能会令人非常失望。我搜索了关于这个“警报”的信息,但我找不到关于它的线索。 你能在某个地方跟我说话吗? 我可以添加菜单功能而不是独立脚本,操作员可以选择“导入数据”,就是这样,但我希望在后台自动执行操作。
答案 0 :(得分:1)
您可以使用HTML服务。我自己对此并不了解,但我认为以下内容可能会满足您的需求:
在你的.gs文件的顶部:
var ss = SpreadsheetApp.getActiveSpreadsheet();
var htmlApp = HtmlService.createTemplateFromFile("html");
var status = "Loading....."
htmlApp.data = status;
ss.show(htmlApp.evaluate()
.setWidth(300)
.setHeight(200));
最后(就在最后一个大括号之前):
var status = "Finished!"
htmlApp.data = status;
ss.show(htmlApp.evaluate()
.setWidth(300)
.setHeight(200));
在名为“html”的新HTML脚本文件中:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<h2>Updating..</h2>
<p id="status">(innerHTML).</p>
<div id="imageico"></div>
<script>
var imageContainer = document.getElementById("imageico");
if (<?= data ?> != "Finished!"){
document.getElementById("status").innerHTML = "Running script, please wait..";
} else {
document.getElementById("status").innerHTML = "Finished! You can now close the window.";
closeBtn();
}
function closeBtn(){
var button = document.createElement("INPUT");
button.setAttribute("type", "button");
button.setAttribute("value", "Close");
button.setAttribute("onclick", "closeWindow();");
imageContainer.appendChild(button);
}
function closeWindow(){
google.script.host.close();
}
</script>
</body>
</html>
已编辑基于评论
在你的.gs文件中:
function test() {
htmlApp("","");
/*
*
* Put your code in here....
*
*/
Utilities.sleep(3000); // change this value to show the "Running script, please wait.." HTML window for longer time.
htmlApp("Finished!","");
Utilities.sleep(3000); // change this value to show the "Finished! This window will close automatically. HTML window for longer time.
htmlApp("","close"); // Automatically closes the HTML window.
}
function htmlApp (status,close) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var htmlApp = HtmlService.createTemplateFromFile("html");
htmlApp.data = status;
htmlApp.close = close;
ss.show(htmlApp.evaluate()
.setWidth(300)
.setHeight(200));
}
在名为'html'的HTML脚本文件中:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<h2>Updating..</h2>
<p id="status">(innerHTML).</p>
<div id="imageico"></div>
<script>
var imageContainer = document.getElementById("imageico");
if (<?= data ?> != "Finished!"){
document.getElementById("status").innerHTML = "Running script, please wait..";
} else {
document.getElementById("status").innerHTML = "Finished! This window will close automatically.";
}
if (<?= close ?> == "close"){
google.script.host.close();
}
</script>
</body>
</html>
看看这个Sample Spreadsheet。
答案 1 :(得分:0)
我没有看到任何关于您的问题的方法或示例脚本。但是alert
关于function onOpen() {
SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
.createMenu('Custom Menu')
.addItem('Show alert', 'showAlert')
.addToUi();
}
function showAlert() {
var ui = SpreadsheetApp.getUi(); // Same variations.
var result = ui.alert(
'Please confirm',
'Are you sure you want to continue?',
ui.ButtonSet.YES_NO);
// Process the user's response.
if (result == ui.Button.YES) {
// User clicked "Yes".
ui.alert('Confirmation received.');
} else {
// User clicked "No" or X in the title bar.
ui.alert('Permission denied.');
}
}
可能有所帮助。它将在用户编辑器中打开一个对话框,其中包含给定的消息和一个&#34; OK&#34;按钮。但是,此方法在对话框打开时挂起服务器端脚本,并且在用户解除对话框后脚本将恢复。
您也可以在运行脚本之前执行documentation。
self.color = color