gpsread GoogleSheetsは警告でワークシートを保護します
gspread
ライブラリを使用してワークシートを保護し、編集者であっても変更を加えようとしている場合はユーザーに警告しようとしています。
Googleスプレッドシートでは、これは「この範囲を編集するときに警告を表示する」と呼ばれます
Gpsreadにはadd_protected_range
Hereの機能があります。gpsreadを介して実行するworksheet.add_protected_range('A1:J10', warning_only=True)
と、エラーが発生します
gspread.exceptions.APIError:{'コード':400、 'メッセージ': '無効なリクエスト[0] .addProtectedRange:ProtectedRangeはwarningOnlyです。エディターを設定することはできません。 '、' status ':' INVALID_ARGUMENT '}
削除しwarning_only
てもエラーは返されませんが、編集者は引き続き編集できます。これは私の目標ではありません。
これを機能させるにはどうすればよいですか?
また、この関数は範囲を保護するためにのみ機能します。シート全体を保護する方法はありますか?
回答
私はあなたの目標を次のように信じています。
- 質問1:ユーザー
A1:J10
がシートののセルを編集したときに警告を表示したいとします。ユーザーが保護範囲内のセルを編集するときに、警告画面を表示する必要があります。 - 質問2:範囲ではなくシートを保護したい。ユーザーが保護されたシートのセルを編集するときに、警告画面を表示する必要があります。
質問1の回答:
ときはwarningOnly
さtrue
、のプロパティeditors
缶は使用できません。しかし、スクリプトを見たadd_protected_range
ところ、デフォルトのエディターが含まれているようです。参考これにより、このようなエラーが発生すると思います。したがって、この場合、これを回避するために、batchUpdateメソッドを直接使用するのはどうでしょうか。サンプルスクリプトは次のとおりです。
サンプルスクリプト:
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)
- 上記のスクリプトを実行すると、「Sheet1」の「A1:J10」のセルが保護されます。また、ユーザーが保護範囲内のセルを編集すると、警告画面が開きます。
質問2の回答:
この場合も、batchUpdateメソッドを直接使用するのはどうですか?サンプルスクリプトは次のとおりです。
サンプルスクリプト:
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)
- 上記のスクリプトを実行すると、「Sheet1」のシートが保護されます。また、ユーザーが「Sheet1」のセルを編集すると、警告画面が開きます。
参照:
- gspreadのmodels.py
- batch_update(body)
- ProtectedRange