从当前电子表格在其他电子表格中运行脚本

时间:2020-10-23 10:53:07

标签: google-apps-script google-sheets

我有两个不同的电子表格,它们都有自己的脚本项目。我从SpreadsheetA创建了一个库,并将其链接到SpreadsheetB。现在,当我从SpreadsheetB脚本调用SpreadsheetA的函数时,它要在SpreadsheetB的当前活动表中运行,而我想在SpreadsheetA的选定表上运行该函数。

function createDO() {
  var ss = SpreadsheetApp.getActive(); //SpreadsheetB
  var cell = ss.getActiveCell().getRowIndex();
  var spreadSheetAURL = "URL"; //SpreadsheetA
  var spreadSheetsInA = SpreadsheetApp.openByUrl(spreadSheetAURL).getSheetByName("name");
  spreadSheetsInA.activate()
  Sheetname.Project(); //script in SpreadsheetA
};

我需要从当前SpreadsheetB运行SpreadsheetA的Sheetname.Protect()函数。

1 个答案:

答案 0 :(得分:2)

可能的解决方案:

首先,值得注意的是,库不能像这样工作。正如Oleg Valter所言,库本质上是实用程序脚本,没有绑定到任何一个特定的脚本/类/项目。

但是,作为一种解决方法,您可以设置一个Web应用程序,该程序可以从一个项目调用到另一个项目,并在相应电子表格的doGet()函数内运行代码。

结构看起来像这样:

在电子表格A中:

function doGet(e) {
  var sheetName = e.parameter.sheetName
  var sheet = SpreadsheetApp.getActiveSpreadheet.getSheetByName(sheetName);
  sheet.activate();

  // I am not how this works, but I have extrapolated from your question
  Sheetname.Project(); 
}

然后从Publish > Deploy as web app...菜单项将其部署为Web应用程序。设置应为Execute the app as: meWho has access to the app: Anyone (even anonymous)

然后,从对话框的电子表格B:

中获取Web应用程序URL。
function createDO() {
  var ss = SpreadsheetApp.getActive(); //SpreadsheetB
  var cell = ss.getActiveCell().getRowIndex();
  var webAppUrl = "URL"; //SpreadsheetA
  UrlFetchApp.fetch(webAppUrl + "?sheetName=name");
};

?sheetName=name参数是一个URL查询字符串,将被传递到Web应用程序的doGet(e)的事件对象。这是通过e.parameter.sheetName访问的。

查询字符串=右侧的字符串必须是您最初尝试激活的工作表名称。

我希望这对您有帮助!

参考文献:

相关问题