我想為 Google 表格設計一個應用程式腳本,當表格關閉時,它可以保護最后一行的資料。
例如,如果我正在處理作業表并且資料直到第 100 行,那么當我關閉作業表時,直到第 100 行的資料應該受到保護并鎖定除作業表所有者之外的所有用戶。
上述任何幫助將不勝感激。
uj5u.com熱心網友回復:
我相信你的目標如下。
- 當作業表關閉時,您希望保護現有資料范圍中的第一行到最后一行。
- 您想使用 Google Apps 腳本實作此目的。
如果當用戶closes the sheet表示要關閉瀏覽器選項卡時,不幸的是,在當前階段,Google Apps Script 中沒有觸發這種情況。
從您的以下回復中,
在那種情況下是否可以使用打開作業表的觸發器?
在這種情況下,可以使用 OnOpen 觸發器。但是,在您的情況下,我認為需要使用可安裝的 OnOpen 觸發器。因為范圍是需要保護的。
而且,根據您的以下回復,
它涵蓋了要使用的觸發器而不是完整的腳本我正在尋找一個腳本來執行此操作
我知道您想要示例腳本。
在這種情況下,下面的示例腳本怎么樣?
示例腳本:
請將以下腳本復制并粘貼到電子表格的腳本編輯器中。并且,請在函式中安裝 OnOpen 觸發器installedOnOpen。當您使用此腳本時,請設定sheetNames并重新打開電子表格。這樣,腳本就運行了。
function installedOnOpen(e) {
const sheetNames = ["Sheet1"]; // Please set the sheet names you want to protect.
const sheets = e.source.getSheets().filter(s => sheetNames.includes(s.getSheetName()));
if (sheets.length == 0) return;
sheets.forEach(s => {
const p = s.getProtections(SpreadsheetApp.ProtectionType.RANGE);
if (p.length > 0) {
p.forEach(pp => pp.remove());
}
const lastRow = s.getLastRow();
if (lastRow != 0) {
const newProtect = s.getRange(1, 1, lastRow, s.getMaxColumns()).protect();
newProtect.removeEditors(newProtect.getEditors());
if (newProtect.canDomainEdit()) newProtect.setDomainEdit(false);
}
});
}
運行此腳本時,對于 的作業表
sheetNames,現有資料范圍中的第 1 行到最后一行受到保護。如果要對電子表格中的所有作業表運行此腳本,請進行如下修改。
從
const sheetNames = ["Sheet1"]; // Please set the sheet names you want to protect. const sheets = e.source.getSheets().filter(s => sheetNames.includes(s.getSheetName()));至
const sheets = e.source.getSheets();
在此示例腳本中,所有列都受到保護。如果您只想保護資料范圍,請修改
const newProtect = s.getRange(1, 1, lastRow, s.getMaxColumns()).protect();為const newProtect = s.getDataRange().protect();.
參考:
- 可安裝觸發器
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/493957.html
上一篇:下拉選單腳本的資料匯入
