gpsread Lindungi Lembar Kerja Google Sheets dengan Peringatan
Saya mencoba menggunakan gspread
perpustakaan untuk melindungi lembar kerja dan memperingatkan pengguna jika mereka akan membuat perubahan bahkan jika mereka adalah editor.
Di Google Sheets, ini disebut "Tampilkan peringatan saat mengedit rentang ini"
Gpsread memiliki fungsi add_protected_range
disini . Melalui gpsread saya menjalankan worksheet.add_protected_range('A1:J10', warning_only=True)
dan saya mendapatkan kesalahan
gspread.exceptions.APIError: {'code': 400, 'message': 'Permintaan tidak valid [0] .addProtectedRange: ProtectedRange is warningOnly. Editor tidak dapat disetel padanya. ',' Status ':' INVALID_ARGUMENT '}
Menghapus warning_only
mengembalikan tidak ada kesalahan tetapi kemudian editor masih dapat mengedit, yang bukan tujuan saya.
Bagaimana cara membuat ini bekerja?
Selain itu, fungsi ini hanya berfungsi untuk membuat rentang terlindungi. Apakah ada cara untuk membuat seluruh lembar terlindungi?
Jawaban
Saya yakin tujuan Anda sebagai berikut.
- Pertanyaan 1: Anda ingin memperlihatkan peringatan saat pengguna mengedit sel
A1:J10
di lembar. Saat pengguna mengedit sel dalam rentang yang dilindungi, Anda ingin menampilkan layar peringatan. - Pertanyaan 2: Anda ingin melindungi sheet, bukan rentang. Saat pengguna mengedit sel di lembar yang diproteksi, Anda ingin menampilkan layar peringatan.
Jawaban untuk pertanyaan 1:
Ketika warningOnly
adalah true
, milik editors
kaleng tidak digunakan. Tapi, ketika saya melihat skripnya add_protected_range
, tampaknya editor default disertakan. Ref Saya pikir dengan ini, kesalahan seperti itu terjadi. Jadi dalam kasus ini, untuk menghindari hal ini, bagaimana kalau langsung menggunakan metode batchUpdate? Contoh skripnya adalah sebagai berikut.
Contoh skrip:
spreadsheetId = "###" # Please set the Spreadsheet ID.
sheetName = "Sheet1" # Please set the sheet name.
client = gspread.authorize(credentials)
ss = client.open_by_key(spreadsheetId)
sheetId = ss.worksheet(sheetName)._properties['sheetId']
request_body = {
"requests": [
{
"addProtectedRange": {
"protectedRange": {
"range": {
"sheetId": sheetId,
"startRowIndex": 0,
"endRowIndex": 10,
"startColumnIndex": 0,
"endColumnIndex": 10
},
"warningOnly": True
}
}
}
]
}
res = ss.batch_update(request_body)
- Saat skrip di atas dijalankan, sel "A1: J10" dari "Sheet1" diproteksi. Dan saat pengguna mengedit sel dalam rentang yang dilindungi, layar peringatan akan terbuka.
Jawaban untuk pertanyaan 2:
Dalam kasus ini, juga, bagaimana jika langsung menggunakan metode batchUpdate? Contoh skripnya adalah sebagai berikut.
Contoh skrip:
spreadsheetId = "###" # Please set the Spreadsheet ID.
sheetName = "Sheet1" # Please set the sheet name.
client = gspread.authorize(credentials)
ss = client.open_by_key(spreadsheetId)
sheetId = ss.worksheet(sheetName)._properties['sheetId']
request_body = {
"requests": [
{
"addProtectedRange": {
"protectedRange": {
"range": {
"sheetId": sheetId,
},
"warningOnly": True
}
}
}
]
}
res = ss.batch_update(request_body)
- Ketika skrip di atas dijalankan, lembar "Sheet1" dilindungi. Dan ketika pengguna mengedit sel di "Sheet1", layar peringatan akan terbuka.
Referensi:
- models.py dari gspread
- batch_update (body)
- ProtectedRange