gpsread Google ชีตปกป้องแผ่นงานพร้อมคำเตือน
ฉันกำลังพยายามใช้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 is warningOnly ไม่สามารถตั้งค่าตัวแก้ไขได้ ',' status ':' INVALID_ARGUMENT '}
การนำออกwarning_only
ไม่ส่งคืนข้อผิดพลาด แต่ผู้แก้ไขยังคงสามารถแก้ไขได้ซึ่งไม่ใช่เป้าหมายของฉัน
ฉันจะทำงานนี้ได้อย่างไร
นอกจากนี้ฟังก์ชั่นนี้ใช้งานได้เพื่อป้องกันช่วงเท่านั้น มีวิธีทำให้ทั้งแผ่นป้องกันหรือไม่?
คำตอบ
ฉันเชื่อว่าเป้าหมายของคุณดังต่อไปนี้
- คำถามที่ 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)
- เมื่อเรียกใช้สคริปต์ด้านบนเซลล์ของ "A1: J10" ของ "Sheet1" จะได้รับการป้องกัน และเมื่อผู้ใช้แก้ไขเซลล์ในช่วงที่มีการป้องกันหน้าจอคำเตือนจะเปิดขึ้น
คำตอบสำหรับคำถาม 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" หน้าจอคำเตือนจะเปิดขึ้น
อ้างอิง:
- Models.py ของ gspread
- batch_update (เนื้อหา)
- ProtectedRange