Class Protection

保護

存取及修改受保護的範圍和工作表。受保護的儲存格範圍可以是靜態儲存格範圍,也可以是具名範圍。受保護的工作表可能包含未受保護的區域。如果是以舊版 Google 試算表建立的試算表,請改用 PageProtection 類別。

// Protect range A1:B10, then remove all other users from the list of editors.
const ss = SpreadsheetApp.getActive();
const range = ss.getRange('A1:B10');
const protection = range.protect().setDescription('Sample protected range');

// Ensure the current user is an editor before removing others. Otherwise, if
// the user's edit permission comes from a group, the script throws an exception
// upon removing the group.
const me = Session.getEffectiveUser();
protection.addEditor(me);
protection.removeEditors(protection.getEditors());
if (protection.canDomainEdit()) {
  protection.setDomainEdit(false);
}
// Remove all range protections in the spreadsheet that the user has permission
// to edit.
const ss = SpreadsheetApp.getActive();
const protections = ss.getProtections(SpreadsheetApp.ProtectionType.RANGE);
for (let i = 0; i < protections.length; i++) {
  const protection = protections[i];
  if (protection.canEdit()) {
    protection.remove();
  }
}
// Protect the active sheet, then remove all other users from the list of
// editors.
const sheet = SpreadsheetApp.getActiveSheet();
const protection = sheet.protect().setDescription('Sample protected sheet');

// Ensure the current user is an editor before removing others. Otherwise, if
// the user's edit permission comes from a group, the script throws an exception
// upon removing the group.
const me = Session.getEffectiveUser();
protection.addEditor(me);
protection.removeEditors(protection.getEditors());
if (protection.canDomainEdit()) {
  protection.setDomainEdit(false);
}

方法

方法傳回類型簡短說明
addEditor(emailAddress)Protection將指定使用者新增至受保護工作表或範圍的編輯者清單。
addEditor(user)Protection將指定使用者新增至受保護工作表或範圍的編輯者清單。
addEditors(emailAddresses)Protection將指定的使用者陣列新增至受保護工作表或範圍的編輯者清單。
addTargetAudience(audienceId)Protection將指定目標對象新增為受保護範圍的編輯者。
canDomainEdit()Boolean決定網域中擁有試算表的所有使用者,是否都有權編輯受保護的範圍或工作表。
canEdit()Boolean決定使用者是否有權編輯受保護的範圍或工作表。
getDescription()String取得受保護範圍或工作表的說明。
getEditors()User[]取得受保護範圍或工作表的編輯者清單。
getProtectionType()ProtectionType取得受保護區域的類型,可能是 RANGESHEET
getRange()Range取得受保護的範圍。
getRangeName()String|null如果受保護的範圍與已命名範圍相關聯,則會取得受保護範圍的名稱。
getTargetAudiences()TargetAudience[]傳回可編輯受保護範圍的目標對象 ID。
getUnprotectedRanges()Range[]取得受保護工作表中的未受保護範圍陣列。
isWarningOnly()Boolean判斷受保護區域是否使用「警告式」保護措施。
remove()void取消保護範圍或工作表。
removeEditor(emailAddress)Protection從受保護的工作表或範圍的編輯者清單中移除指定使用者。
removeEditor(user)Protection從受保護的工作表或範圍的編輯者清單中移除指定使用者。
removeEditors(emailAddresses)Protection從受保護的工作表或範圍的編輯者清單中,移除指定的使用者陣列。
removeTargetAudience(audienceId)Protection移除指定目標對象做為受保護範圍的編輯者。
setDescription(description)Protection設定受保護範圍或工作表的說明。
setDomainEdit(editable)Protection設定網域中擁有試算表的所有使用者,是否都有權編輯受保護的範圍或工作表。
setNamedRange(namedRange)Protection將受保護的範圍與現有名稱範圍建立關聯。
setRange(range)Protection調整受保護的範圍。
setRangeName(rangeName)Protection將受保護的範圍與現有名稱範圍建立關聯。
setUnprotectedRanges(ranges)Protection取消保護受保護工作表中的指定範圍陣列。
setWarningOnly(warningOnly)Protection設定這個受保護範圍是否使用「以警告為準」的保護機制。

內容詳盡的說明文件

addEditor(emailAddress)

將指定使用者新增至受保護工作表或範圍的編輯者清單。這個方法不會自動授予使用者編輯試算表的權限;如要授予這項權限,請另外呼叫 Spreadsheet.addEditor(emailAddress)

// Opens the spreadsheet file by its URL. If you created your script from within
// a Google Sheets file, you can use SpreadsheetApp.getActiveSpreadsheet()
// instead.
// TODO(developer): Replace the URL with your own.
const ss = SpreadsheetApp.openByUrl(
    'https://docs.google.com/spreadsheets/d/abc123456/edit',
);

// Adds an editor to the spreadsheet using an email address.
// TODO(developer): Replace the email address with a valid email.
ss.addEditor('cloudysanfrancisco@gmail.com');

// Gets a sheet by its name and protects it.
const sheet = ss.getSheetByName('Sheet1');
const sampleProtectedSheet = sheet.protect();

// Adds an editor of the protected sheet using an email address.
// TODO(developer): Replace the email address with a valid email.
sampleProtectedSheet.addEditor('cloudysanfrancisco@gmail.com');

// Gets the editors of the protected sheet.
const editors = sampleProtectedSheet.getEditors();

// Logs the editors' email addresses to the console.
for (const editor of editors) {
  console.log(editor.getEmail());
}

參數

名稱類型說明
emailAddressString要新增的使用者電子郵件地址。

回攻員

Protection:代表保護設定的物件,用於鏈結。

授權

使用這個方法的指令碼需要一或多個下列範圍的授權:

  • https://www.googleapis.com/auth/spreadsheets.currentonly
  • https://www.googleapis.com/auth/spreadsheets

addEditor(user)

將指定使用者新增至受保護工作表或範圍的編輯者清單。這個方法不會自動授予使用者編輯試算表的權限;如要授予這項權限,請另外呼叫 Spreadsheet.addEditor(user)

// Opens the spreadsheet file by its URL. If you created your script from within
// a Google Sheets file, you can use SpreadsheetApp.getActiveSpreadsheet()
// instead.
// TODO(developer): Replace the URL with your own.
const ss = SpreadsheetApp.openByUrl(
    'https://docs.google.com/spreadsheets/d/abc123456/edit',
);

// Gets a sheet by its name.
const sheet = ss.getSheetByName('Sheet1');

// Protects the sheet.
const sampleProtectedSheet = sheet.protect();

// Adds the active user as an editor of the protected sheet.
sampleProtectedSheet.addEditor(Session.getActiveUser());

// Gets the editors of the protected sheet.
const editors = sampleProtectedSheet.getEditors();

// Logs the editors' email addresses to the console.
for (const editor of editors) {
  console.log(editor.getEmail());
}

參數

名稱類型說明
userUser要新增的使用者代表。

回攻員

Protection:代表保護設定的物件,用於鏈結。

授權

使用這個方法的指令碼需要一或多個下列範圍的授權:

  • https://www.googleapis.com/auth/spreadsheets.currentonly
  • https://www.googleapis.com/auth/spreadsheets

addEditors(emailAddresses)

將指定的使用者陣列新增至受保護工作表或範圍的編輯者清單。這個方法不會自動授予使用者編輯試算表的權限;如要授予這項權限,請另外呼叫 Spreadsheet.addEditors(emailAddresses)

// Opens the spreadsheet file by its URL. If you created your script from within
// a Google Sheets file, you can use SpreadsheetApp.getActiveSpreadsheet()
// instead.
// TODO(developer): Replace the URL with your own.
const ss = SpreadsheetApp.openByUrl(
    'https://docs.google.com/spreadsheets/d/abc123456/edit',
);

// Gets a sheet by its name.
const sheet = ss.getSheetByName('Sheet1');

// Creates variables for the email addresses to add as editors.
// TODO(developer): Replace the email addresses with valid ones.
const TEST_EMAIL_1 = 'cloudysanfrancisco@gmail.com';
const TEST_EMAIL_2 = 'baklavainthebalkans@gmail.com';

// Protects the sheet.
const sampleProtectedSheet = sheet.protect();

// Adds editors to the protected sheet using the email address variables.
sampleProtectedSheet.addEditors([TEST_EMAIL_1, TEST_EMAIL_2]);

// Gets the editors of the protected sheet.
const editors = sampleProtectedSheet.getEditors();

// Logs the editors' email addresses to the console.
for (const editor of editors) {
  console.log(editor.getEmail());
}

參數

名稱類型說明
emailAddressesString[]要新增的使用者電子郵件地址陣列。

回攻員

Protection:代表保護設定的物件,用於鏈結。

授權

使用這個方法的指令碼需要一或多個下列範圍的授權:

  • https://www.googleapis.com/auth/spreadsheets.currentonly
  • https://www.googleapis.com/auth/spreadsheets

addTargetAudience(audienceId)

將指定目標對象新增為受保護範圍的編輯者。

參數

名稱類型說明
audienceIdString要新增的目標對象 ID。

回攻員

Protection:代表保護設定的物件,用於鏈結。

授權

使用這個方法的指令碼需要一或多個下列範圍的授權:

  • https://www.googleapis.com/auth/spreadsheets.currentonly
  • https://www.googleapis.com/auth/spreadsheets

canDomainEdit()

決定網域中擁有試算表的所有使用者,是否都有權編輯受保護的範圍或工作表。如果使用者沒有編輯受保護範圍或工作表的權限,系統會擲回例外狀況。

// Opens the spreadsheet file by its URL. If you created your script from within
// a Google Sheets file, you can use SpreadsheetApp.getActiveSpreadsheet()
// instead.
// TODO(developer): Replace the URL with your own.
const ss = SpreadsheetApp.openByUrl(
    'https://docs.google.com/spreadsheets/d/abc123456/edit',
);

// Gets a sheet by its name.
const sheet = ss.getSheetByName('Sheet1');

// Protects the sheet.
const sampleProtectedSheet = sheet.protect();

// Logs whether domain users have permission to edit the protected sheet to the
// console.
console.log(sampleProtectedSheet.canDomainEdit());

回攻員

Boolean - true:如果網域中所有使用者都有權編輯受保護的範圍或工作表;false:如果沒有。

授權

使用這個方法的指令碼需要一或多個下列範圍的授權:

  • https://www.googleapis.com/auth/spreadsheets.currentonly
  • https://www.googleapis.com/auth/spreadsheets

canEdit()

決定使用者是否有權編輯受保護的範圍或工作表。試算表擁有者一律可以編輯受保護的範圍和工作表。

// Remove all range protections in the spreadsheet that the user has permission
// to edit.
const ss = SpreadsheetApp.getActive();
const protections = ss.getProtections(SpreadsheetApp.ProtectionType.RANGE);
for (let i = 0; i < protections.length; i++) {
  const protection = protections[i];
  if (protection.canEdit()) {
    protection.remove();
  }
}

回攻員

Boolean - true 如果使用者有權編輯受保護的範圍或工作表;false 如果沒有

授權

使用這個方法的指令碼需要一或多個下列範圍的授權:

  • https://www.googleapis.com/auth/spreadsheets.currentonly
  • https://www.googleapis.com/auth/spreadsheets

getDescription()

取得受保護範圍或工作表的說明。如果未設定說明,這個方法會傳回空白字串。

// Opens the spreadsheet file by its URL. If you created your script from within
// a Google Sheets file, you can use SpreadsheetApp.getActiveSpreadsheet()
// instead.
// TODO(developer): Replace the URL with your own.
const ss = SpreadsheetApp.openByUrl(
    'https://docs.google.com/spreadsheets/d/abc123456/edit',
);

// Gets a sheet by its name.
const sheet = ss.getSheetByName('Sheet1');

// Protects the sheet and sets the description.
const sampleProtectedSheet =
    sheet.protect().setDescription('Sample sheet is protected');

// Gets the description of the protected sheet and logs it to the console.
const sampleProtectedSheetDescription = sampleProtectedSheet.getDescription();
console.log(sampleProtectedSheetDescription);

回攻員

String:受保護範圍或工作表的說明,如果未設定說明,則為空白字串。

授權

使用這個方法的指令碼需要一或多個下列範圍的授權:

  • https://www.googleapis.com/auth/spreadsheets.currentonly
  • https://www.googleapis.com/auth/spreadsheets

getEditors()

取得受保護範圍或工作表的編輯者清單。如果使用者沒有編輯受保護範圍或工作表的權限,系統會擲回例外狀況。

// Protect the active sheet, then remove all other users from the list of
// editors.
const sheet = SpreadsheetApp.getActiveSheet();
const protection = sheet.protect().setDescription('Sample protected sheet');

// Ensure the current user is an editor before removing others. Otherwise, if
// the user's edit permission comes from a group, the script throws an exception
// upon removing the group.
const me = Session.getEffectiveUser();
protection.addEditor(me);
protection.removeEditors(protection.getEditors());
if (protection.canDomainEdit()) {
  protection.setDomainEdit(false);
}

回攻員

User[]:有權編輯受保護範圍或工作表的使用者陣列

授權

使用這個方法的指令碼需要一或多個下列範圍的授權:

  • https://www.googleapis.com/auth/spreadsheets.currentonly
  • https://www.googleapis.com/auth/spreadsheets

getProtectionType()

取得受保護區域的類型,可能是 RANGESHEET

// Opens the spreadsheet file by its URL. If you created your script from within
// a Google Sheets file, you can use SpreadsheetApp.getActiveSpreadsheet()
// instead.
// TODO(developer): Replace the URL with your own.
const ss = SpreadsheetApp.openByUrl(
    'https://docs.google.com/spreadsheets/d/abc123456/edit',
);

// Gets a sheet by its name.
const sheet = ss.getSheetByName('Sheet1');

// Protects the sheet.
const sampleProtectedSheet = sheet.protect();

// Gets the type of the protected area.
const protectionType = sampleProtectedSheet.getProtectionType();

// Logs 'SHEET'to the console since the type of the protected area is a sheet.
console.log(protectionType.toString());

回攻員

ProtectionType:受保護區域的類型,可能是 RANGESHEET

授權

使用這個方法的指令碼需要一或多個下列範圍的授權:

  • https://www.googleapis.com/auth/spreadsheets.currentonly
  • https://www.googleapis.com/auth/spreadsheets

getRange()

取得受保護的範圍。如果保護措施適用於工作表而非範圍,這個方法會傳回涵蓋整個工作表的範圍。

// Opens the spreadsheet file by its URL. If you created your script from within
// a Google Sheets file, you can use SpreadsheetApp.getActiveSpreadsheet()
// instead.
// TODO(developer): Replace the URL with your own.
const ss = SpreadsheetApp.openByUrl(
    'https://docs.google.com/spreadsheets/d/abc123456/edit',
);

// Gets a sheet by its name.
const sheet = ss.getSheetByName('Sheet1');

// Gets the range 'A1:B10' of Sheet1.
const range = sheet.getRange('A1:B10');

// Makes cells A1:B10 a protected range.
const sampleProtectedRange = range.protect();

// Gets the protected ranges on the sheet.
const protections = sheet.getProtections(SpreadsheetApp.ProtectionType.RANGE);

// Logs the A1 notation of the first protected range on the sheet.
console.log(protections[0].getRange().getA1Notation());

回攻員

Range:受保護的範圍。

授權

使用這個方法的指令碼需要一或多個下列範圍的授權:

  • https://www.googleapis.com/auth/spreadsheets.currentonly
  • https://www.googleapis.com/auth/spreadsheets

getRangeName()

如果受保護範圍與已命名範圍相關聯,則會取得該範圍的名稱。如果保護設定未與已命名範圍建立關聯,則會傳回 null。請注意,指令碼必須明確呼叫 setRangeName(rangeName),才能將受保護的範圍與已命名範圍建立關聯;呼叫 Range.protect()Range (剛好是已命名範圍) 建立保護設定,但未呼叫 setRangeName(rangeName),不足以建立關聯。不過,在 Google 試算表 UI 中,從已命名範圍建立受保護範圍時,系統會自動建立關聯。

// Protect a named range in a spreadsheet and log the name of the protected
// range.
const ss = SpreadsheetApp.getActive();
const range = ss.getRange('A1:B10');
const protection = range.protect();
ss.setNamedRange('Test', range);  // Create a named range.
protection.setRangeName(
    'Test');  // Associate the protection with the named range.
Logger.log(
    protection.getRangeName());  // Verify the name of the protected range.

回攻員

String|null:受保護具名範圍的名稱,或 null (如果受保護範圍未與具名範圍建立關聯)

授權

使用這個方法的指令碼需要一或多個下列範圍的授權:

  • https://www.googleapis.com/auth/spreadsheets.currentonly
  • https://www.googleapis.com/auth/spreadsheets

getTargetAudiences()

傳回可編輯受保護範圍的目標對象 ID。

回攻員

TargetAudience[]:目標對象 ID 的陣列。

授權

使用這個方法的指令碼需要一或多個下列範圍的授權:

  • https://www.googleapis.com/auth/spreadsheets.currentonly
  • https://www.googleapis.com/auth/spreadsheets

getUnprotectedRanges()

取得受保護工作表中的未受保護範圍陣列。如果 Protection 物件對應的是受保護的範圍,而非受保護的工作表,這個方法會傳回空陣列。如要變更未受保護的範圍,請使用 setUnprotectedRanges(ranges) 設定新的範圍陣列;如要重新保護整個工作表,請設定空白陣列。

// Unprotect cells E2:F5 in addition to any other unprotected ranges in the
// protected sheet.
const sheet = SpreadsheetApp.getActiveSheet();
const protection = sheet.protect();
const unprotected = protection.getUnprotectedRanges();
unprotected.push(sheet.getRange('E2:F5'));
protection.setUnprotectedRanges(unprotected);

回攻員

Range[]:受保護工作表中未受保護的範圍陣列

授權

使用這個方法的指令碼需要一或多個下列範圍的授權:

  • https://www.googleapis.com/auth/spreadsheets.currentonly
  • https://www.googleapis.com/auth/spreadsheets

isWarningOnly()

判斷受保護區域是否使用「警告」保護措施。如果範圍受到警告保護,表示所有使用者都能編輯該範圍內的資料,但系統會顯示警告訊息,要求使用者確認編輯作業。根據預設,受保護的範圍或工作表不會顯示警告。如要變更為警告狀態,請使用 setWarningOnly(warningOnly)

// Opens the spreadsheet file by its URL. If you created your script from within
// a Google Sheets file, you can use SpreadsheetApp.getActiveSpreadsheet()
// instead.
// TODO(developer): Replace the URL with your own.
const ss = SpreadsheetApp.openByUrl(
    'https://docs.google.com/spreadsheets/d/abc123456/edit',
);

// Gets a sheet by its name.
const sheet = ss.getSheetByName('Sheet1');

// Protects the sheet.
const sampleProtectedSheet = sheet.protect();

// Sets the warning status for the protected sheet as true.
sampleProtectedSheet.setWarningOnly(true);

const protectedSheetWarningStatus = sampleProtectedSheet.isWarningOnly();

// Logs the warning status of the protected sheet to the console.
console.log(protectedSheetWarningStatus);

回攻員

Boolean - true 如果受保護的範圍或工作表僅使用警告式保護措施。

授權

使用這個方法的指令碼需要一或多個下列範圍的授權:

  • https://www.googleapis.com/auth/spreadsheets.currentonly
  • https://www.googleapis.com/auth/spreadsheets

remove()

取消保護範圍或工作表。

// Remove all range protections in the spreadsheet that the user has permission
// to edit.
const ss = SpreadsheetApp.getActive();
const protections = ss.getProtections(SpreadsheetApp.ProtectionType.RANGE);
for (let i = 0; i < protections.length; i++) {
  const protection = protections[i];
  if (protection.canEdit()) {
    protection.remove();
  }
}
// Remove sheet protection from the active sheet, if the user has permission to
// edit it.
const sheet = SpreadsheetApp.getActiveSheet();
const protection = sheet.getProtections(SpreadsheetApp.ProtectionType.SHEET)[0];
if (protection?.canEdit()) {
  protection.remove();
}

授權

使用這個方法的指令碼需要一或多個下列範圍的授權:

  • https://www.googleapis.com/auth/spreadsheets.currentonly
  • https://www.googleapis.com/auth/spreadsheets

removeEditor(emailAddress)

從受保護的工作表或範圍的編輯者清單中移除指定使用者。請注意,如果使用者是具有編輯權限的 Google 群組成員,或網域中的所有使用者都具有編輯權限,使用者仍可編輯受保護的區域。您無法移除試算表擁有者或目前使用者。

// Opens the spreadsheet file by its URL. If you created your script from within
// a Google Sheets file, you can use SpreadsheetApp.getActiveSpreadsheet()
// instead.
// TODO(developer): Replace the URL with your own.
const ss = SpreadsheetApp.openByUrl(
    'https://docs.google.com/spreadsheets/d/abc123456/edit',
);

// Gets a sheet by its name.
const sheet = ss.getSheetByName('Sheet1');

// Creates a variable for an email address.
// TODO(developer): Replace the email address with a valid one.
const TEST_EMAIL = 'baklavainthebalkans@gmail.com';

// Protects the sheet.
const sampleProtectedSheet = sheet.protect();

// Adds an editor to the protected sheet using the email address variable.
sampleProtectedSheet.addEditor(TEST_EMAIL);

// Removes the editor from the protected sheet using the email address variable.
sampleProtectedSheet.removeEditor(TEST_EMAIL);

// Gets the editors of the protected sheet.
const editors = sampleProtectedSheet.getEditors();

// Logs the editors' email addresses to the console.
for (const editor of editors) {
  console.log(editor.getEmail());
}

參數

名稱類型說明
emailAddressString要移除的使用者電子郵件地址。

回攻員

Protection:代表保護設定的物件,用於鏈結。

授權

使用這個方法的指令碼需要一或多個下列範圍的授權:

  • https://www.googleapis.com/auth/spreadsheets.currentonly
  • https://www.googleapis.com/auth/spreadsheets

removeEditor(user)

從受保護的工作表或範圍的編輯者清單中移除指定使用者。請注意,如果使用者是具有編輯權限的 Google 群組成員,或網域中的所有使用者都具有編輯權限,使用者仍可編輯受保護的區域。您無法移除試算表擁有者或目前使用者。

// Opens the spreadsheet file by its URL. If you created your script from within
// a Google Sheets file, you can use SpreadsheetApp.getActiveSpreadsheet()
// instead.
// TODO(developer): Replace the URL with your own.
const ss = SpreadsheetApp.openByUrl(
    'https://docs.google.com/spreadsheets/d/abc123456/edit',
);

// Gets a sheet by its name.
const sheet = ss.getSheetByName('Sheet1');

// Protects the sheet.
const sampleProtectedSheet = sheet.protect();

// Removes the active user from the editors of the protected sheet.
sampleProtectedSheet.removeEditor(Session.getActiveUser());

// Gets the editors of the protected sheet.
const editors = sampleProtectedSheet.getEditors();

// Logs the editors' email addresses to the console.
for (const editor of editors) {
  console.log(editor.getEmail());
}

參數

名稱類型說明
userUser要移除的使用者代表。

回攻員

Protection:代表保護設定的物件,用於鏈結

授權

使用這個方法的指令碼需要一或多個下列範圍的授權:

  • https://www.googleapis.com/auth/spreadsheets.currentonly
  • https://www.googleapis.com/auth/spreadsheets

removeEditors(emailAddresses)

從受保護的工作表或範圍的編輯者清單中,移除指定的使用者陣列。 請注意,如果使用者是具有編輯權限的 Google 群組成員,或是網域中的所有使用者都具有編輯權限,這些使用者仍可編輯受保護的區域。您無法移除試算表擁有者或目前使用者。

// Protect the active sheet, then remove all other users from the list of
// editors.
const sheet = SpreadsheetApp.getActiveSheet();
const protection = sheet.protect().setDescription('Sample protected sheet');

// Ensure the current user is an editor before removing others. Otherwise, if
// the user's edit permission comes from a group, the script throws an exception
// upon removing the group.
const me = Session.getEffectiveUser();
protection.addEditor(me);
protection.removeEditors(protection.getEditors());
if (protection.canDomainEdit()) {
  protection.setDomainEdit(false);
}

參數

名稱類型說明
emailAddressesString[]要移除的使用者電子郵件地址陣列。

回攻員

Protection:代表保護設定的物件,用於鏈結

授權

使用這個方法的指令碼需要一或多個下列範圍的授權:

  • https://www.googleapis.com/auth/spreadsheets.currentonly
  • https://www.googleapis.com/auth/spreadsheets

removeTargetAudience(audienceId)

移除指定目標對象做為受保護範圍的編輯者。

參數

名稱類型說明
audienceIdString要移除的目標對象 ID。

回攻員

Protection:代表保護設定的物件,用於鏈結。

授權

使用這個方法的指令碼需要一或多個下列範圍的授權:

  • https://www.googleapis.com/auth/spreadsheets.currentonly
  • https://www.googleapis.com/auth/spreadsheets

setDescription(description)

設定受保護範圍或工作表的說明。

// Opens the spreadsheet file by its URL. If you created your script from within
// a Google Sheets file, you can use SpreadsheetApp.getActiveSpreadsheet()
// instead.
// TODO(developer): Replace the URL with your own.
const ss = SpreadsheetApp.openByUrl(
    'https://docs.google.com/spreadsheets/d/abc123456/edit',
);

// Gets the sheet 'Sheet1' by its name.
const sheet = ss.getSheetByName('Sheet1');

// Protects the sheet.
const sampleProtectedSheet = sheet.protect();

// Sets the sheet description to 'Sheet1 is protected.'
sampleProtectedSheet.setDescription('Sheet1 is protected');

// Gets the description of the protected sheet.
const sampleProtectedSheetDescription = sampleProtectedSheet.getDescription();

// Logs the description of the protected sheet to the console.
console.log(sampleProtectedSheetDescription);

參數

名稱類型說明
descriptionString受保護範圍或工作表的說明。

回攻員

Protection:代表保護設定的物件,用於鏈結。

授權

使用這個方法的指令碼需要一或多個下列範圍的授權:

  • https://www.googleapis.com/auth/spreadsheets.currentonly
  • https://www.googleapis.com/auth/spreadsheets

setDomainEdit(editable)

設定網域中擁有試算表的所有使用者,是否都有權編輯受保護的範圍或工作表。請注意,無論這項設定為何,凡是具備明確編輯權限的使用者,都能編輯受保護的區域。如果試算表不屬於 Google Workspace 網域 (也就是由 gmail.com 帳戶擁有),系統會擲回例外狀況。

參數

名稱類型說明
editableBooleantrue 如果網域中擁有試算表的所有使用者都應具備編輯受保護範圍或工作表的權限;false如果不是,請選取這個選項。

回攻員

Protection:代表保護設定的物件,用於鏈結

授權

使用這個方法的指令碼需要一或多個下列範圍的授權:

  • https://www.googleapis.com/auth/spreadsheets.currentonly
  • https://www.googleapis.com/auth/spreadsheets

setNamedRange(namedRange)

將受保護的範圍與現有名稱範圍建立關聯。如果具名範圍涵蓋的區域與目前的受保護範圍不同,這個方法會將保護範圍移至具名範圍。具名範圍必須與目前的受保護範圍位於同一張工作表。請注意,指令碼必須明確呼叫這個方法,才能將受保護的範圍與具名範圍建立關聯;如果呼叫 Range.protect() 從具名範圍建立保護,但未呼叫 setRangeName(rangeName),則無法建立關聯。Range不過,在 Google 試算表 UI 中,從已命名範圍建立受保護範圍時,系統會自動建立關聯。

// Opens the spreadsheet file by its URL. If you created your script from within
// a Google Sheets file, you can use SpreadsheetApp.getActiveSpreadsheet()
// instead.
// TODO(developer): Replace the URL with your own.
const ss = SpreadsheetApp.openByUrl(
    'https://docs.google.com/spreadsheets/d/abc123456/edit',
);

// Protects cells A1:D10 on Sheet1.
const sheet = ss.getSheetByName('Sheet1');
const protectedRange = sheet.getRange('A1:D10').protect();

// Logs the current protected range, A1:D10.
console.log(protectedRange.getRange().getA1Notation());

// Creates a named range for cells E1:J10 called 'NewRange.'
const newRange = sheet.getRange('E1:J10');
ss.setNamedRange('NewRange', newRange);
const namedRange = ss.getNamedRanges()[0];

// Updates the protected range to the named range, 'NewRange.'
// This updates the protected range on Sheet1 from A1:D10 to E1:J10.
protectedRange.setNamedRange(namedRange);

// Logs the updated protected range to the console.
console.log(protectedRange.getRange().getA1Notation());

參數

名稱類型說明
namedRangeNamedRange要與受保護範圍建立關聯的現有名稱範圍。

回攻員

Protection:代表保護設定的物件,用於鏈結。

授權

使用這個方法的指令碼需要一或多個下列範圍的授權:

  • https://www.googleapis.com/auth/spreadsheets.currentonly
  • https://www.googleapis.com/auth/spreadsheets

setRange(range)

調整受保護的範圍。如果指定範圍涵蓋的區域與目前的受保護範圍不同,這個方法會將保護措施移至新範圍。

// Opens the spreadsheet file by its URL. If you created your script from within
// a Google Sheets file, you can use SpreadsheetApp.getActiveSpreadsheet()
// instead.
// TODO(developer): Replace the URL with your own.
const ss = SpreadsheetApp.openByUrl(
    'https://docs.google.com/spreadsheets/d/abc123456/edit',
);

// Protects cells A1:D10 on Sheet1 of the spreadsheet.
const sheet = ss.getSheetByName('Sheet1');
const protectedRange = sheet.getRange('A1:D10').protect();

// Logs the original protected range, A1:D10, to the console.
console.log(protectedRange.getRange().getA1Notation());

// Gets the range E1:J10.
const newRange = sheet.getRange('E1:J10');

// Updates the protected range to E1:J10.
protectedRange.setRange(newRange);

// Logs the updated protected range to the console.
console.log(protectedRange.getRange().getA1Notation());

參數

名稱類型說明
rangeRange要防止編輯的新範圍。

回攻員

Protection:代表保護設定的物件,用於鏈結。

授權

使用這個方法的指令碼需要一或多個下列範圍的授權:

  • https://www.googleapis.com/auth/spreadsheets.currentonly
  • https://www.googleapis.com/auth/spreadsheets

setRangeName(rangeName)

將受保護的範圍與現有名稱範圍建立關聯。如果具名範圍涵蓋的區域與目前的受保護範圍不同,這個方法會將保護範圍移至具名範圍。具名範圍必須與目前的受保護範圍位於同一張工作表。請注意,指令碼必須明確呼叫這個方法,才能將受保護的範圍與具名範圍建立關聯;如果呼叫 Range.protect()Range 建立保護,而該 Range 剛好是具名範圍,但未呼叫 setRangeName(rangeName),則無法將兩者建立關聯。不過,在 Google 試算表 UI 中,從已命名範圍建立受保護範圍時,系統會自動建立關聯。

// Protect a named range in a spreadsheet and log the name of the protected
// range.
const ss = SpreadsheetApp.getActive();
const range = ss.getRange('A1:B10');
const protection = range.protect();
ss.setNamedRange('Test', range);  // Create a named range.
protection.setRangeName(
    'Test');  // Associate the protection with the named range.
Logger.log(
    protection.getRangeName());  // Verify the name of the protected range.

參數

名稱類型說明
rangeNameString要保護的具名範圍名稱。

回攻員

Protection:代表保護設定的物件,用於鏈結

授權

使用這個方法的指令碼需要一或多個下列範圍的授權:

  • https://www.googleapis.com/auth/spreadsheets.currentonly
  • https://www.googleapis.com/auth/spreadsheets

setUnprotectedRanges(ranges)

取消保護受保護工作表中的指定範圍陣列。如果 Protection 物件對應的是受保護範圍,而非受保護工作表,或是有任何範圍不在受保護工作表上,就會擲回例外狀況。如要變更未受保護的範圍,請設定新的範圍陣列;如要重新保護整個工作表,請設定空白陣列。

// Protect the active sheet except B2:C5, then remove all other users from the
// list of editors.
const sheet = SpreadsheetApp.getActiveSheet();
const protection = sheet.protect().setDescription('Sample protected sheet');
const unprotected = sheet.getRange('B2:C5');
protection.setUnprotectedRanges([unprotected]);

// Ensure the current user is an editor before removing others. Otherwise, if
// the user's edit permission comes from a group, the script throws an exception
// upon removing the group.
const me = Session.getEffectiveUser();
protection.addEditor(me);
protection.removeEditors(protection.getEditors());
if (protection.canDomainEdit()) {
  protection.setDomainEdit(false);
}

參數

名稱類型說明
rangesRange[]要在受保護的工作表中保留未受保護的範圍陣列。

回攻員

Protection:代表保護設定的物件,用於鏈結

授權

使用這個方法的指令碼需要一或多個下列範圍的授權:

  • https://www.googleapis.com/auth/spreadsheets.currentonly
  • https://www.googleapis.com/auth/spreadsheets

setWarningOnly(warningOnly)

設定這個受保護範圍是否使用「以警告為依據」的保護措施。如果採用警告式保護措施,所有使用者都能編輯該區域的資料,但系統會顯示警告訊息,要求使用者確認編輯作業。根據預設,受保護的範圍或工作表不會顯示警告。如要檢查警告狀態,請使用 isWarningOnly()

// Opens the spreadsheet file by its URL. If you created your script from within
// a Google Sheets file, you can use SpreadsheetApp.getActiveSpreadsheet()
// instead.
// TODO(developer): Replace the URL with your own.
const ss = SpreadsheetApp.openByUrl(
    'https://docs.google.com/spreadsheets/d/abc123456/edit',
);

// Gets the sheet 'Sheet1' by its name.
const sheet = ss.getSheetByName('Sheet1');

// Protects the sheet and sets the protection to warning-based.
const sampleProtectedSheet = sheet.protect().setWarningOnly(true);

// Logs whether the protected sheet is warning-based to the console.
console.log(sampleProtectedSheet.isWarningOnly());

參數

名稱類型說明
warningOnlyBoolean

回攻員

Protection:代表保護設定的物件,用於鏈結。

授權

使用這個方法的指令碼需要一或多個下列範圍的授權:

  • https://www.googleapis.com/auth/spreadsheets.currentonly
  • https://www.googleapis.com/auth/spreadsheets