如何解决从当前电子表格在其他电子表格中运行脚本 可能的解决方案:参考文献:
我有两个不同的电子表格,它们都有自己的脚本项目。我从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()
函数。
解决方法
可能的解决方案:
首先,值得注意的是,库不能像这样工作。正如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: me
和Who 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
访问的。
查询字符串=
右侧的字符串必须是您最初尝试激活的工作表名称。
我希望这对您有帮助!
参考文献:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。