Zugriff auf GoogleSheets mit gspread

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Knollo
User
Beiträge: 28
Registriert: Mittwoch 10. Juni 2020, 14:44

Hallo in die Runden, von einem Raspi sollen Messwerte an GoogleSheets gesendet werden.

Code: Alles auswählen

import gspread

service_account = gspread.service_account(filename='xxx.json')
spreadsheet = service_account.open('yyy')
worksheet = spreadsheet.worksheet('Tabellenblatt1')
print(worksheet)
      
def getCellValue(row, col):
    return worksheet.cell(row,col).value

def setCellValue(row,col, value):
    worksheet.update_cell(row,col, value)
    
setCellValue(1,5,"Test")
Das Script läuft auch. Ich versuche grad einen Weg zu finden um neue Messwerte in die letzte Zeile einzutragen.
Ich kann keinen anderen Weg finden als die gesamte Tabelle runterzuladen:

Code: Alles auswählen

list_of_dicts = worksheet.get_all_records()
und so die Zeilen auszuzählen. Oder kennt wer einen einfacheren Weg? Gegen Ende des Versuches werden es ca. 200000 Zeilen sein...

Danke
Stefan
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Füg einfach eine Zeile an.
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Knollo: Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.

Alles was Funktionen (und Methoden) ausser Konstanten benötiegen, bekommen sie als Argument(e) übergeben. Die beiden Funktionen brauchen also auch das Arbeitsblatt als Argument. Womit der Sinn von den Funktionen irgendwie verloren geht, denn man es bringt eigentlich keinen Vorteil gegenüber des Aufrufs der Methoden.

Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase).

Code: Alles auswählen

import gspread


def get_cell_value(worksheet, row, column):
    return worksheet.cell(row, column).value


def set_cell_value(worksheet, row, column, value):
    worksheet.update_cell(row, column, value)


def main():
    service_account = gspread.service_account(filename="xxx.json")
    spreadsheet = service_account.open("yyy")
    worksheet = spreadsheet.worksheet("Tabellenblatt1")
    print(worksheet)
    set_cell_value(1, 5, "Test")


if __name__ == "__main__":
    main()
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Knollo
User
Beiträge: 28
Registriert: Mittwoch 10. Juni 2020, 14:44

Oja, ich muss mir die richtige Schreibweise zwingend angewöhnen. Aber bei den gelegentlichen Codearbeiten geht das irgendwie verloren :-(
.... aber die Autovervollständigung hat's verraten:

Code: Alles auswählen

i = len(worksheet.col_values(1)) + 1
= neue Zeile

was vermutlich nur bis Zeile 997 funktioniert und dann muss wirklich eine neue Zeile eingefügt werden - ich lasse mich überraschen.

Danke
Stefan
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Und du nimmst jetzt nicht die Funktion zum Anfügen einer Zeile, weil?
Knollo
User
Beiträge: 28
Registriert: Mittwoch 10. Juni 2020, 14:44

hast recht, man könnte abfragen ob die letzte Zeile erreicht ist. Ist aber wohl einfacher gleich mit

Code: Alles auswählen

add_cols(cols: int)
eine neue Zeile einzufügen - Danke

Stefan
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Knollo: Man könnte sich ja so ein bisschen verarscht vorkommen. Aber gut, nimm halt was anderes als die Methode die eine Zeile hinzufügt. 🙄
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Knollo
User
Beiträge: 28
Registriert: Mittwoch 10. Juni 2020, 14:44

ups, ich will niemand "verarschen" - nein wirklich nicht :o
meine Englischkenntnisse sind da nicht so der Brüller, was unklar ist wird mit Google-Translator, try and error etc... geklärt - und solche Missverständniss sind das Ergebniss - also: tut mir leid.
Was ist die richtige Methode eine Zeile hinzuzufügen?

Danke - Stefan
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Knollo: Gleich die erste Antwort (von sparrow) verweist auf `append_row()`.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten