gpsread Google 스프레드 시트는 경고와 함께 워크 시트를 보호합니다.

Aug 20 2020

내가 사용하려고 gspread워크 시트를 보호하고 그들이 편집기 경우에도 변경을하려고하는 경우 사용자에게 경고하기 위해 라이브러리를.

Google 스프레드 시트에서는 '이 범위를 수정할 때 경고 표시'라고합니다.

Gpsread에는 add_protected_range 여기 에 기능 이 있습니다. gpsread를 통해 실행 worksheet.add_protected_range('A1:J10', warning_only=True)하고 오류가 발생합니다.

gspread.exceptions.APIError : { 'code': 400, 'message': '잘못된 요청 [0] .addProtectedRange : ProtectedRange는 warningOnly입니다. 편집자를 설정할 수 없습니다. ','status ':'INVALID_ARGUMENT '}

제거하면 warning_only오류가 반환되지 않지만 편집자는 여전히 편집 할 수 있으며 이는 내 목표가 아닙니다.

이 작업을 수행하려면 어떻게해야합니까?

또한이 기능은 범위를 보호하기 위해서만 작동합니다. 전체 시트를 보호하는 방법이 있습니까?

답변

1 Tanaike Aug 20 2020 at 08:36

다음과 같이 당신의 목표를 믿습니다.

  • 질문 1 : 사용자 A1:J10가 시트에서의 셀을 편집 할 때 경고를 표시하려고합니다 . 사용자가 보호 된 범위의 셀을 편집 할 때 경고 화면을 표시하려고합니다.
  • 질문 2 : 범위 대신 시트를 보호하고 싶습니다. 사용자가 보호 된 시트의 셀을 편집 할 때 경고 화면을 표시하려고합니다.

질문 1에 대한 답변 :

warningOnly이다 true,의 재산 editors캔은하지 사용할 수. 하지만 스크립트 add_protected_range를 보니 기본 편집기가 포함 된 것 같습니다. Ref 이것에 의해 이러한 오류가 발생한다고 생각합니다. 이 경우이를 방지하기 위해 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 (본문)
  • ProtectedRange