我与另一个用户共享了一张带有受保护范围的工作表,并希望他们使用分配了相应脚本的SUBMIT按钮,将一张工作表的特定范围单元格中的发票副本或数据等数据提交给另一个工作表。
场景:两个电子表格,即S1和S2,其中S2受到保护,另一个用户想要在他/她按下提交按钮后从S1到S2提交数据。
function testing() {
var ss = SpreadsheetApp.getActive();
var s1 = ss.getSheetByName('S1');
var s2 = ss.getSheetByName('S2');
s1.getRange("A1:G1").copyTo(s2.getRange("A1:G1"));
}
另外,我已经读过这可以通过将脚本部署为Web应用程序来完成。我通过进入“部署为Web应用程序”并将脚本设置为以管理员(我)身份运行并可以匿名访问来尝试。但仍然没有积极的结果。
为Web应用程序部署做了类似的事情:
function doGet(e){
return testing(e);
}
function testing() {
var ss = SpreadsheetApp.getActive();
var s1 = ss.getSheetByName('S1');
var s2 = ss.getSheetByName('S2');
s1.getRange("A1:G1").copyTo(s2.getRange("A1:G1"));
}
错误说:您正在尝试编辑受保护的单元格或对象。如果您需要编辑,请与电子表格所有者联系以取消保护。
有人可以引导我完成整个过程或告诉我哪里出错了吗?
当您运行代码时,您正在调用testing()
函数,就像使用当前用户拥有的任何帐户和权限一样。
你需要做的是使用UrlFetchApp
调用doGet()
这将以发布应用程序的用户身份运行脚本:
1:复制并粘贴代码
function copyRange() {
UrlFetchApp.fetch("--- Copy this URL from step 3 ---");
}
function doGet(e) {
var ss = SpreadsheetApp.getActive();
var s1 = ss.getSheetByName('Sheet1');
var s2 = ss.getSheetByName('Sheet2');
s1.getRange("A1").copyTo(s2.getRange("A1"));
}
2:单击“发布” - “部署”将新项目版本设置为以我身份执行,并允许任何人在测试中执行此操作。点击“更新”
3:复制当前的Web应用程序URL并将其粘贴到fetch()
中保存脚本。
现在任何用户都应该能够运行该功能,或者从步骤3转到URL将触发该功能。