Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 更改纸张的所有者,而不考虑复印机_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 更改纸张的所有者,而不考虑复印机

Google apps script 更改纸张的所有者,而不考虑复印机,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有一个电子表格,其中包含一个可以由不同用户使用脚本复制的工作表。问题是,当用户复制图纸时,他将成为默认所有者,并获得编辑该图纸的受保护范围的权限。 我当前的脚本完美地将保护复制到新工作表,但复制器用户将成为相同的编辑器。 请帮助我了解允许复制工作表但未成为受保护范围编辑器的用户如何将工作表所有者(而非电子表格)重置为管理员用户的方法。 我当前的代码: 功能保护{ var电子表格=SpreadsheetApp.getActive; var myValue=SpreadsheetApp.g

我有一个电子表格,其中包含一个可以由不同用户使用脚本复制的工作表。问题是,当用户复制图纸时,他将成为默认所有者,并获得编辑该图纸的受保护范围的权限。

我当前的脚本完美地将保护复制到新工作表,但复制器用户将成为相同的编辑器。

请帮助我了解允许复制工作表但未成为受保护范围编辑器的用户如何将工作表所有者(而非电子表格)重置为管理员用户的方法。

我当前的代码:

功能保护{ var电子表格=SpreadsheetApp.getActive; var myValue=SpreadsheetApp.getActiveSheet.getSheetName; 电子表格.表格; var totalSheets=countSheets;//脚本函数 myValue=DO+totalSheets; SpreadsheetApp.getActiveSpreadsheet.renameActiveSheetmyValue; var protection=spreadsheet.getActiveSheet.protect; 保护.setUnprotectedRanges[电子表格.getRange'C2:E5',电子表格.getRange'C6:D7',电子表格.getRange'F5:G6',电子表格.getRange'B9:G18',电子表格.getRange'G7:G8'] .removeEditors['user1.com','user2.com','user3.com']; 电子表格.getRange'G2'.setValuemyValue; 电子表格.getRange'G3'.setValuenew Date.setNumberFormat'dd-MMM-YYYY'; 电子表格.getRange'H1:H'.clearContent;
}; 我相信你的目标如下

当Protect脚本由非所有者的用户运行时,您希望允许复制工作表,而不希望使用Google Apps脚本将用户作为编辑器添加到复制的整个工作表中。 该电子表格已与用户共享。 修改点: 在本例中,我认为当用户运行脚本时,由所有者运行脚本可能是问题的解决方案。 当用户运行脚本时,为了让不是用户的所有者运行脚本,我建议使用Web应用程序。 用法: 1.准备脚本。 请将以下脚本复制粘贴到脚本编辑器并保存

function doGet() {
  script();
  return ContentService.createTextOutput();
}

function Protect() {
  const url = ScriptApp.getService().getUrl();
  UrlFetchApp.fetch(url, {headers: {authorization: "Bearer " + ScriptApp.getOAuthToken()}});

// DriveApp.getFiles()  // This is used for automatically detecting the scope of "https://www.googleapis.com/auth/drive.readonly". This scope is used for the access token.
}

// This script is the same with your "Protect".
function script() {
  var spreadsheet = SpreadsheetApp.getActive();
  var myValue = SpreadsheetApp.getActiveSheet().getSheetName();
  spreadsheet.duplicateActiveSheet();
  var totalSheets = countSheets(); //script function
  myValue = "DO" + totalSheets;
  SpreadsheetApp.getActiveSpreadsheet().renameActiveSheet(myValue);
  var protection = spreadsheet.getActiveSheet().protect();
  protection.setUnprotectedRanges([spreadsheet.getRange('C2:E5'), spreadsheet.getRange('C6:D7'), spreadsheet.getRange('F5:G6'), spreadsheet.getRange('B9:G18'), spreadsheet.getRange('G7:G8')])
    .removeEditors(['user1.com', 'user2.com', 'user3.com']);
  spreadsheet.getRange('G2').setValue(myValue);
  spreadsheet.getRange('G3').setValue(new Date()).setNumberFormat('dd-MMM-YYYY');
  spreadsheet.getRange('H1:H').clearContent();

};
在此脚本中,不包括计数表。因为我不确定你问题中的计数表。所以请小心这个。请准备这个。 2.部署Web应用程序。 在脚本编辑器上,通过发布->部署为web应用打开一个对话框。 选择我作为执行应用程序的身份:。 这样,脚本将作为所有者运行。 为具有应用访问权限的任何人选择:。 在这种情况下,需要访问令牌才能请求Web应用程序。 单击“作为新项目版本部署”按钮。 自动打开所需授权的对话框。 单击“查看权限”。 选择自己的帐户。 未验证此应用程序时单击“高级”。 单击“转到项目名称” 单击允许按钮。 单击“确定”。 3.测试此解决方法。 请单击指定了“保护”的按钮。这样,脚本由所有者运行。这样,即使用户单击按钮,脚本的结果也与所有者运行的结果相同

注: 请在启用V8时使用此脚本。 参考资料:
我能问一下你的问题吗?在您的情况下,用户是如何运行脚本的?母版工作表中有一个指定用于运行上述脚本的图像,因此,当用户运行此脚本时,将创建一个母版工作表副本谢谢您的回复。例如,当非用户的所有者运行保护功能时,这是您期望的结果吗?是的,当非所有者/管理员的用户运行保护功能时,则仅允许用户编辑提及的未受保护的范围,而不允许编辑整张表。由于脚本复制了主控表,其中只有管理员/所有者可以编辑除未受保护范围中提到的范围之外的其他范围。感谢您的回复。从你的答复中,我提出了一个变通办法作为答案。你能确认一下吗?如果这不是你期望的方向,我道歉。你完全理解我的目标。感谢您提供的详细答案。我们今天将对其进行测试,并返回结果。谢谢你的回复。当这不是你期望的方向时,我向你道歉。你写的剧本创造了奇迹。我正需要这个。非常感谢您的时间和帮助。@谢谢您的回复。我很高兴你的问题解决了。也谢谢你。你能不能详细说明一下,如果我需要调用一个以上的函数来运行,我如何编程doGet函数。