首页 > 解决方案 > 在项目 html 中使用 google-apps 脚本 url

问题描述

我有一个从谷歌表格部署的网络应用程序,我想在我的 html 文件中构建一个动态 url,它允许我将参数传递给 html 文件,以便它可以正确更新。

正如链接的问题/答案中所引用的,我已将其用作我的 doGet 函数的一部分,以允许使用部分 url 在我的电子表格中设置一个值。这工作正常。

function doGet(e){
    var ss = SpreadsheetApp.openById("SHEET_ID");
    var sheet = ss.getSheetByName("TAB_NAME");
    var row = Number(e.parameter.row); 
    var col = Number(e.parameter.col); 
    var range = sheet.getRange(row, col);

    sheet.getRange(row, col).setValue('APPROVED')}

我正在发送一封电子邮件,允许用户单击 url 以允许更新单元格。我目前对行和列进行了硬编码,它为该行和列执行所需的功能(更新单元格)。我想要一个动态 url 字符串,它允许我根据数据为不同的行构建 url。

<a href="https://script.google.com/. . ./exec?row=5&col=44" 
target="_blank" style="padding: 8px 12px; border: 1px solid 
#00AA00;border-radius: 2px;font-family: Helvetica, Arial, sans- 
serif;font-size: 14px; color: #ffffff;text-decoration: none;font- 
weight:bold;display: inline-block;"> APPROVE</a>

我的 gs 文件中也有这个。如何将 Alast 的值传递给我,它将我想要的行从我的 gs 文件传递​​到 html 文件?

var thisSS = SpreadsheetApp.openById("Spreadsheet_ID");
var s = thisSS.getSheetByName("View");
var Avals = s.getRange("A1:A").getValues();
var Alast = Avals.filter(String).length;

标签: google-apps-script

解决方案


我使用这样的功能:

谷歌脚本(服务器端):

function getScriptURL(qs) {
  var url = ScriptApp.getService().getUrl();
  //Logger.log(url + qs);
  return url + qs ;
}

和这个客户端:

function getUrl(qs){
  google.script.run
  .withSuccessHandler(loadNewPage)
  .getScriptURL(qs);
}

我使用如下命令加载新页面:

window.open(url,"_top");

我使用它在页面之间导航,并且getURL(querystring)硬连线到导航按钮,但您也可以从客户端或服务器端的动态数据中获取它们。

或许是这样的:

客户端Javascript:

function getUrl(){
  var r=$('#rv').val();
  var c=$('#cv').val();
  var qs={row:r,col:c};
  google.script.run
  .withSuccessHandler(function(msg){
      //not sure what you would want to do here if anything
  })
  .getScriptURL(qObj);
}

服务器端:

function getScriptURL(qObj) {
  var url = Utilities.formatString('%s?row=%s&col=%s',ScriptApp.getService().getUrl(),qObj.row,qObj.col);
  //Actually at this point I'd probably just update the data and forget about assembling a querystring to be sent back to the server.  And return a message to the user now it has been updated.
  //Logger.log(url + qs);
  return url;
}

推荐阅读