2016-04-29 2 views
0

, которая может помочь в разработке сценария, который заблокирует строку электронной таблицы google после ввода пользователем данных в строку таблицы.Функция блокировки строк электронной таблицы Google

Описание случая:

У меня есть таблица с электронными таблицами. Эта таблица используется многими пользователями для ввода данных. Я должен быть уверен, что разные способы использования не могут изменить данные, введенные другими. Лучший способ, если каждая строка будет иметь специальную кнопку «блокировки». Поэтому, когда пользователь вводит всю информацию в строку таблицы, он может нажать кнопку блокировки, чтобы предотвратить изменения данных другими пользователями. Кроме того, я хочу, чтобы пользователь мог изменить введенные данные, но с некоторым ограничением времени - например, только по крайней мере 30 минут он заблокировал строку.

Как администратор, я хочу иметь возможность изменять любые данные в таблице электронных таблиц.

Благодарим за помощь.

ответ

0

Возможно, вы можете использовать функцию Защищенного диапазона электронной таблицы Google как блокировку. Когда человек хочет писать данные, он устанавливает листок как частный, после этого публикует публикацию. Во время написания человеком А, если человек Б тоже хочет писать, он встретит исключение, он сможет его поймать и подождать, а потом попытаться написать.

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"]