2016-04-29 8 views
0

Wer kann helfen, ein Skript zu entwickeln, das die Google-Tabellenzeile sperren, nachdem ein Benutzer Daten in die Tabellenzeile eingegeben hat.Google Spreadsheet Row Lock-Funktion

Fallbeschreibung:

Ich habe eine Tabellenkalkulationstabelle. Diese Tabelle wird von vielen Benutzern zum Eingeben von Daten verwendet. Ich muss sicher sein, dass verschiedene Verwendungen die von den anderen eingegebenen Daten nicht ändern können. Der beste Weg, wenn jede Zeile einen speziellen "Lock" -Knopf hat. Wenn der Benutzer alle Informationen in die Tabellenzeile eingegeben hat, kann er die "Sperren" -Taste drücken, um Datenänderungen durch andere Benutzer zu verhindern. Außerdem möchte ich, dass der Benutzer die Daten, die er eingegeben hat, mit einer gewissen Zeit ändern kann - zum Beispiel nur für mindestens 30 Minuten hat er die Zeile gesperrt.

Als Administrator möchte ich in der Lage sein, alle Daten in einer Tabellenkalkulationstabelle zu ändern.

Vielen Dank für Ihre Hilfe.

Antwort

0

Vielleicht können Sie die Protected Range-Funktion von Google Tabellenkalkulation als Sperre verwenden. Wenn Person A Daten schreiben möchte, legt er das Blatt als privat an, danach wird es öffentlich gesetzt. Während Person A schreibt, wenn Person B auch schreiben möchte, trifft er eine Ausnahme, er kann sie fangen und einen Moment warten, später versuchen, in sie zu schreiben.

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