我想在点击按钮时在我的Google电子表格的侧边栏中显示一个gif

时间:2016-03-16 22:27:28

标签: google-apps-script google-sheets

我的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;
&#13;
&#13;

最后&#34; clickAction()&#34;函数,我认为gif显示代码将是。

&#13;
&#13;
function clickAction() {
var img = UrlFetchApp.fetch(https://c4a54d10381f750e81dcc323aed21e2c95725815.googledrive.com/host/0Bwyqwd2fAHMMallsNkNOV0RfcTg/wait_progress.gif)/wait_progress.gif"></div>');

  
}
&#13;
&#13;
&#13;

最好的情况是图像显示在侧边栏的按钮下面,然后当&#34; retrieveCurrentRow()&#34;时消失。功能已完成运行。该功能的最后一步是提醒用户知道功能是否完整。如果gif可以在某种对话框中弹出,它也会起作用。我也接受任何其他建议。 &#34; retrieveCurrentRow()&#34;相当广泛,运行大约需要20秒。即使我知道它在做什么以及需要多长时间,但我发现我非常想再次点击按钮而不是等待。我知道如果没有让他们知道程序正在运行的东西会让我的用户发疯。 :)

我现在已经筋疲力尽了,并且不知道下一步该去哪,或者如果可能的话,因为我在互联网搜索中找不到任何类似的东西,我相信这是不可能的。非常感谢您的帮助。

1 个答案:

答案 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()”函数的前面部分是什么并不重要。这真的是一种解决方法,可能有更好的方法,但它有效!我很高兴。