我在Google New Sheets中遇到了一些有关保护的奇怪问题 . 我创建了一个我正在经历的演示 . 工作表的URL是:
https://docs.google.com/spreadsheets/d/1IbAiqU6oN48Ql_wM3TeRl9TqG6DFsBKtc86jElv0Kbo/edit?usp=sharing
除了第5行到第7行之外,我使用“数据 - 受保护的工作表和范围...”下的“除了某些单元格之外的工作表保护”方法保护了工作表以供所有者编辑
我还有一个简单的用户功能菜单,在开放时调用它包含一个简单的Google Apps脚本来插入给定数量的行(下面的代码) .
当另一个用户访问工作表时,会发生以下情况:
-
基本保护似乎有效 . 用户只能编辑行5到7 .
-
插入行功能(在“用户功能”菜单下选择)产生'Service error: Spreadsheets' .
-
如果用户尝试删除3个未受保护的行中的任何一个,则消息'Can' t将保存您的更改 . 复制任何最近的更改,然后恢复到早期版本... ' appears in a red box at the top of the screen. Clicking on the '恢复为早期版本...'链接反转删除 .
如果我删除所有保护,那么用户的所有内容都是100% - 插入行功能 - 删除行等 .
我在这里复制的功能非常类似于我在旧表中使用多年而没有任何问题(即保护电子表格的某些区域不被共享用户编辑) .
我必须补充一点,我发布了关于插入行功能几天前无法正常工作的问题 .
这是我的功能代码:
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var menuEntries = [{name: "Insert Rows", functionName: "insertRows"}];
ss.addMenu("User Functions", menuEntries);
}
function insertRows() {
var numRows = Browser.inputBox('Insert Rows', 'Enter the number of rows to insert', Browser.Buttons.OK);
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var curs = sheet.getActiveCell();
var cursRow = curs.getRow();
var cursLastCol = sheet.getLastColumn();
sheet.insertRowsAfter(cursRow, numRows);
var source_range = sheet.getRange(cursRow,1,1,cursLastCol);
var target_range = sheet.getRange(cursRow+1,1,numRows);
source_range.copyTo(target_range);
Browser.msgBox('Insert Rows', +numRows+' rows successfully inserted.', Browser.Buttons.OK);
}
有人能帮忙吗 . 我有一些大客户,我已经构建了复杂的在线电子表格,现在在New Sheets下无法正常运行 .
1 回答
尝试为onOpen()设置项目触发器,而不是使用简单的onOpen() . 然后它以您的权限而不是当前用户的权限运行 . 只需单击Resources / Current Project Triggers并添加一个新触发器 .