繁体   English   中英

Google 表格、脚本在复制后停止工作。

[英]Google sheets, scripts stop working after making a copy.

我有一个电子表格,可以用作模板。 这个电子表格中有一些脚本,我遇到的问题是当你制作电子表格的副本时,我的所有脚本都停止工作。 我必须进入每个脚本并再次手动授权它们。

我们将为我部门的每一项工作制作一份主电子表格的副本。 每天大约会由多人制作 20-30 份母版。

有没有办法避免这种情况?

请参阅下面的示例代码和电子表格。

谢谢,

泰勒

https://docs.google.com/a/costco.com/spreadsheets/d/1vcmjVtS2mKwCGfboVFK14yNoksTJ7pq4vDcKIOpG2oU/edit?usp=sharing

function customDocEmail(){
  var sheet = SpreadsheetApp.getActiveSheet();
  if (sheet.getName() == "Version 1 ") {;
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var triggerCell = sheet.getRange("C17").getValue().toString();
  var email = sheet.getRange("A17").getValue().toString();
  var EMAIL_SENT = new Date() ;

  var recipients = "Youremail@gmail.com";
  var cellA1 = ss.getSheetByName("Version 1 ").getRange("A1").getValue().toString();
  var cellB2 = ss.getSheetByName("Version 1 ").getRange("B2").getValue().toString();
  var cellD1 = ss.getSheetByName("Version 1 ").getRange("D1").getValue().toString();


  }
  var subject = 'New customDoc ' + cellA1+ '-' +cellB2;
  var body = ' Hi Stephanie,' + '\n' + '\n' + 'This job ' + cellA1 + '-'+ cellB2+ ', is being created as a CustomDoc.. Please view the specs for this job. ' + '\n' + ss.getUrl() +' '+ '\n' + '\n' +'Thank you,' + '\n' + cellD1 +' ' ;

  if (triggerCell =="YES") 
 {MailApp.sendEmail(recipients, subject, body);
 sheet.getRange("C17").setValue("SENT");

  }
 }
function templateMagix() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Version 1 ");
  var trigger = sheet.getRange("B3").getValue().toString();
  var formNumber = sheet.getRange("A23").getValue().toString();
  var boom = sheet.getRange("C23").getValue().toString();

 if (boom =="BOOM") 

   sheet.getRange("B3").setValue(formNumber);

 }

您必须一次又一次地授权您的脚本的原因是因为您创建的每个副本都被视为一个新文档,因此附加到该文档的脚本也是如此。 对于任何能够运行脚本的新文档,用户必须提供该文档运行脚本的权限。 无需手动授权即可制作副本和运行脚本,这有点类似于提供未经授权的脚本运行访问权限。 如果可能的话,这可以被视为一个严重的安全线程。 因此,不幸的是,如果不提供运行权限,就无法运行脚本。

虽然,根据您拥有的脚本数量、您的用例以及它们正在执行的功能等,我建议如果可能的话,将这些功能组合到一个脚本中并在必要时调用它们。 这样一来,你将有只有脚本提供手动批准一次,而不必做它的n次数(假设您有n个脚本)为每个脚本被授予许可才能运行。

我能够为此找到一个解决方法,并且它对我的应用程序来说完美无缺。

我将所有 onEdit 脚本放在同一个“项目”中,然后我制作了一个按钮并将我的时间戳功能分配给它。 这提示了我所有需要身份验证的脚本的授权。

接下来,我在制作电子表格副本时遇到了所有“已安装的 onEdits”,但没有保持安装状态,因此脚本仍然无法正常工作。 更多的挖掘和研究使我编写了一个简单但有效的脚本,并将其分配给我新创建的按钮。 这反过来安装了我所有的 onEdit 触发器以及提示授权和所有脚本现在按预期工作。

我希望处理相同问题的人可以在此找到一些用处。

            function authoRize(e) {

  Browser.msgBox("Great! Let's be friends!");

var sheet = SpreadsheetApp.getActive();
 ScriptApp.newTrigger("customDocEmail")
   .forSpreadsheet(sheet)
   .onEdit()
   .create();

var sheet = SpreadsheetApp.getActive();
 ScriptApp.newTrigger("templateMagix")
   .forSpreadsheet(sheet)
   .onEdit()
   .create();

var sheet = SpreadsheetApp.getActive();
 ScriptApp.newTrigger("GetData")
   .forSpreadsheet(sheet)
   .onEdit()
   .create();

var sheet = SpreadsheetApp.getActive();
 ScriptApp.newTrigger("GetPJData")
   .forSpreadsheet(sheet)
   .onEdit()
   .create();

var sheet = SpreadsheetApp.getActive();
 ScriptApp.newTrigger("hideSeek")
   .forSpreadsheet(sheet)
   .onEdit()
   .create();

var sheet = SpreadsheetApp.getActive();
 ScriptApp.newTrigger("hideSeekOP")
   .forSpreadsheet(sheet)
   .onEdit()
   .create();

var sheet = SpreadsheetApp.getActive();
 ScriptApp.newTrigger("hideSeekPJ")
   .forSpreadsheet(sheet)
   .onEdit()
   .create();

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("HOME");
  var newDate = new Date() ;
  sheet.getRange("A5").setValue(newDate);


  goToSheet('Version 1 ');

 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM