【问题标题】:Another user should be able to update the protected range in google spreadsheet using google app script另一个用户应该能够使用谷歌应用脚​​本更新谷歌电子表格中的受保护范围
【发布时间】:2018-06-23 08:25:50
【问题描述】:

我与另一位用户共享了一个范围受保护的工作表,并希望他们使用 提交 按钮提交数据,例如发票副本或从一个工作表的特定单元格范围到另一个工作表的数据分配了相应的脚本。

场景: 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 应用程序”并将脚本设置为以管理员(我)身份运行并可供匿名访问。但仍然没有阳性结果。

确实为网络应用部署做了这样的事情:

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"));
}

错误说: 您正在尝试编辑受保护的单元格或对象。如果您需要编辑,请联系电子表格所有者以取消保护。

谁能指导我完成整个过程或告诉我哪里出了问题?

【问题讨论】:

    标签: google-apps-script deployment google-sheets web-deployment google-spreadsheet-api


    【解决方案1】:

    当您像这样运行代码时,您正在使用当前用户拥有的任何帐户和权限调用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:复制当前网络应用 URL 并将其粘贴到 fetch() 保存脚本。

    现在任何用户都应该能够运行该函数,或者从第 3 步转到 URL 将触发该函数。

    【讨论】:

    • 嘿,上面问题的另一个补充:我正在尝试使用:var ui = SpreadsheetApp.getUi();但随后它运行脚本而不根据需要生成任何 ui。错误提示:“无法从此上下文中调用 SpreadsheetApp.getUi()”。是 doGet() 无法生成或访问 getUi() 的东西吗?
    猜你喜欢
    • 2018-04-16
    • 2022-12-03
    • 2011-05-29
    • 2018-06-03
    • 1970-01-01
    • 2012-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多