Google电子表格行锁定功能

时间:2016-04-29 17:11:10

标签: google-sheets locking rows

谁可以帮助开发一个脚本,在用户向表格行输入数据后锁定google电子表格行。

案例描述:

我有一个电子表格表。许多用户使用此表来输入数据。我需要确保不同的用途不能改变其他人输入的数据。如果每一行都有一个特殊的"锁定"按钮。因此,当用户将所有信息输入到表格行中时,他可以按下"锁定"按钮,以防止其他用户更改数据。此外,我希望用户可以更改他输入的数据但有一些时间限制 - 例如,至少30分钟他锁定了行。

作为管理员,我希望能够更改电子表格表格中的任何数据。

谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

也许你可以使用谷歌电子表格的保护范围功能作为锁。当A人想要写数据时,他将表格设为私有,之后设置为公开。在A人的写作中,如果B人也想写,他会遇到异常,他可以抓住它,等一会儿,稍后再写进去。

class ContextManagerUpdateSheet(object):
    def __init__(self, spread_sheet_id, sheet_id):
        self.spread_sheet_id = spread_sheet_id
        self.sheet_id = sheet_id
        # self.end_row_index = end_row_index
        # self.end_column_index = ord(end_column_index) - 65

    def __enter__(self):
       logger.info("set spreadsheet sheet: {sheet_id} protected.")
       self.protected_id = set_protected(self.spread_sheet_id, self.sheet_id)

    def __exit__(self, *others):
       logger.info("release protected spreadsheet sheet: {sheet_id}.")
       delete_protected(self.spread_sheet_id, self.protected_id)


def runner():
   with ContextManagerUpdateSheet("{google_spread_url}", 0):
       from datetime import datetime
       print datetime.now().strftime("%Y-%m-%d %H:%M:%s")
       data = [["www", "3333"]]
       apped_data("{google_spread_url}", 0, data)

---

@retry(googleapiclient.errors.HttpError, 5, 20, logger=logger)
def set_protected(spreadsheet_id, sheet_id):
   logger.info("test")
   service = get_service_handler()
   requests_list = list()
   requests_list.append(__protected_info(sheet_id))
   body = {
      "requests": requests_list
   }
   resp = service.spreadsheets().batchUpdate(spreadsheetId=spreadsheet_id,
                                          body=body).execute()
   return resp["replies"][0]["addProtectedRange"]["protectedRange"]["protectedRangeId"]