如何通过api基于插入行触发Google Apps脚本功能

时间:2017-11-02 13:44:03

标签: google-apps-script

  1. 我有一个包含5列的Google表格(名字,地址,SKU,报价,状态)。

  2. 我有一个应用程序脚本函数(createQuote),用于查看google工作表行中的上述变量值,并创建一个google文档引号,将变量替换为值。

  3. 我使用Zapier在上面的google工作表中插入行。

  4. 正在努力的方面 - : 当通过zapier(Google Sheet API调用)插入新行时,我需要一种方法来触发我的createQuote函数。

    我尝试使用触发器,但无法实现,任何帮助都表示赞赏。

    谢谢

    这是我的功能代码 -

    function quoteCreator(){
    
    docTemplate = "googledocidgoeshere"
    docName = "Proposal"
    
      var sheet = SpreadsheetApp.getActive().getSheetByName("Main")
      var values = sheet.getDataRange().getValues()
      var full_name = values[1][0]
    
      var copyId   = DriveApp.getFileById(docTemplate).makeCopy(docName+" for "+full_name).getId()
    
    
      // Open the temporary document
     var copyDoc  = DocumentApp.openById(copyId);
    // Get the document’s body section
     var copyBody = copyDoc.getActiveSection();
    // Replace place holder keys/tags,  
     copyBody.replaceText("keyFullName", full_name);
     copyDoc.saveAndClose();
    // Convert temporary document to PDF by using the getAs blob conversion
      var pdf = DriveApp.getFileById(copyId).getAs("application/pdf");
    
    // put the link of created quote in the quote column
      var url = DocumentApp.openById(copyId).getUrl()
     var last = sheet.getRange(2, 7, 1, 1).setValue(url)
    
    
     }
    

    注意:我还没有把循环放在上面,一旦按照我的要求开始工作,我就会这样做。

1 个答案:

答案 0 :(得分:5)

通过Sheets API或Apps脚本进行的更改不会触发onEdit触发器。我给出了两个解决方法。

网络应用

无论进程如何更新,工作表还会向您的脚本deployed as a web application发送GET或POST请求。例如,GET版本可能会访问https://script.google.com/.../exec?run=quoteCreator

function doGet(e) {
  if (e.parameter.run == "quoteCreator") {
    quoteCreator();
    return ContentService.createTextOutput("Quote updated"); 
  }
  else {
    return ContentService.createTextOutput("Unrecognized command");
  } 
} 

Web应用程序的发布方式应使您的其他进程能够执行上述操作;通常这意味着“每个人,甚至是匿名的”。如果安全性存在问题,添加令牌参数可能有所帮助,例如,URL将具有&token=myToken,其中myToken是webapp将使用e.parameter.token检查的字符串。

这里使用GET方法进行说明,您可能会发现POST对此操作更有意义。

重要提示:当GET或POST请求触发执行时,方法getActive...不可用。您需要使用其ID或网址打开所需的任何电子表格(请参阅openByIdopenByUrl)。

定时触发器

按时间间隔(例如,每5分钟)运行一个功能,检查工作表中的行数,并在需要时触发quoteCreator。函数checkNewRows存储脚本属性中的非空行数,因此可以检测到更改。

function checkNewRows() {
  var sp = PropertiesService.getScriptProperties();
  var oldRows = sp.getProperty("rows") || 0; 
  var newRows = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Main").getLastRow();
  if (newRows > oldRows) {
    sp.setProperty("rows", newRows);
    quoteCreator();
  } 
}