我的google电子表格中有一个侧边栏。它包含两个按钮。点击"检索发票"按钮我想运行一个函数" retrieveCurrentRow()"并且还会显示一个gif,直到该功能完成运行。如果那是不可能的,我会很乐意只显示gif,直到侧边栏关闭。
这是我到目前为止打开侧边栏的内容:
function currentRowSidebar() {
var ui = SpreadsheetApp.getUi();
var ss = SpreadsheetApp.getActive();
var sheet = ss.getActiveSheet();
if (sheet.getName() != "InvoiceRecord") {
var goToInvoiceRecord = ss.getSheetByName("InvoiceRecord");
ss.setActiveSheet(goToInvoiceRecord);
}
var html = HtmlService.createHtmlOutputFromFile('index');
SpreadsheetApp.getUi().showSidebar(html);
}

然后是html:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<div>
<p>
Put your cursor on the line of the invoice you want to retrieve and then click the "Retrieve Invoice" button.</p>
<p>
Close the sidebar when you are done. </p>
<p>
<input type="button" value="Retrieve Invoice" onclick="google.script.run.clickAction(); google.script.run.retrieveCurrentRow()"/>
<input type="button" value="Close Sidebar" onclick="google.script.host.close()" /></p>
</div>
</body>
</html>
&#13;
最后&#34; clickAction()&#34;函数,我认为gif显示代码将是。
function clickAction() {
var img = UrlFetchApp.fetch(https://c4a54d10381f750e81dcc323aed21e2c95725815.googledrive.com/host/0Bwyqwd2fAHMMallsNkNOV0RfcTg/wait_progress.gif)/wait_progress.gif"></div>');
}
&#13;
最好的情况是图像显示在侧边栏的按钮下面,然后当&#34; retrieveCurrentRow()&#34;时消失。功能已完成运行。该功能的最后一步是提醒用户知道功能是否完整。如果gif可以在某种对话框中弹出,它也会起作用。我也接受任何其他建议。 &#34; retrieveCurrentRow()&#34;相当广泛,运行大约需要20秒。即使我知道它在做什么以及需要多长时间,但我发现我非常想再次点击按钮而不是等待。我知道如果没有让他们知道程序正在运行的东西会让我的用户发疯。 :)
我现在已经筋疲力尽了,并且不知道下一步该去哪,或者如果可能的话,因为我在互联网搜索中找不到任何类似的东西,我相信这是不可能的。非常感谢您的帮助。
答案 0 :(得分:0)
我明白了。函数“retrieveCurrentRow()”以警报结束。我发现警报会自动关闭HTML模式对话框。所以我用动画gif和没有按钮放入一个showModalDialog()html。它将一直运行,直到警报关闭它。当然,用户可以使用“x”提前关闭它,但是我将文本放在那里让他们现在在操作完成时关闭对话框。这就是我最终的目标。
打开侧栏:
function currentRowSidebar() {
var ui = SpreadsheetApp.getUi();
var ss = SpreadsheetApp.getActive();
var sheet = ss.getActiveSheet();
if (sheet.getName() != "InvoiceRecord") {
var goToInvoiceRecord = ss.getSheetByName("InvoiceRecord");
ss.setActiveSheet(goToInvoiceRecord);
}
var html = HtmlService.createHtmlOutputFromFile('index');
SpreadsheetApp.getUi().showSidebar(html);
}
然后是html:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<div>
<p>
Put your cursor on the line of the invoice you want to retrieve and then click the "Retrieve Invoice" button.</p>
<p>
Close the sidebar when you are done. </p>
<p>
<input type="button" value="Retrieve Invoice" onclick="google.script.run.clickAction(); google.script.run.retrieveCurrentRow()"/>
<input type="button" value="Close Sidebar" onclick="google.script.host.close()" /></p>
</div>
</body>
</html>
点击动作打开html模式对话框:
function clickAction() {
var html = HtmlService.createHtmlOutputFromFile('sampleHtml')
.setWidth(300)
.setHeight(300);
SpreadsheetApp.getUi().showModalDialog(html, 'Retrieving invoice.');
}
那么带有gif的html:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<style>
h2 { color:red; font: 20px bold verdana, helvetica, sans-serif; }
p { font: 14px normal verdana, helvetica, sans-serif; }
#btn { float:right; border-radius: 15px; }
</style>
<div>
<h2>Please be patient.</h2>
<p>The action you are performing may take a while.</p>
<p>This dialog will close when the retrieval is complete.</p>
<p><img src="http://chimplyimage.appspot.com/images/samples/classic-spinner/animatedCircle.gif" alt="Progress Indicator" style="width:50px;height:50px;">
</div>
</body>
</html>
最后,包含警报的“retrieveCurrentRow()”函数的最后一点:
var results = ui.alert('Invoice Retrieval Complete', 'Continue to the retrieved invoice?', ui.ButtonSet.OK_CANCEL);
只要警报位于函数末尾,“retrieveCurrentRow()”函数的前面部分是什么并不重要。这真的是一种解决方法,可能有更好的方法,但它有效!我很高兴。