Seite 1 von 1

Zugriff auf GoogleSheets mit gspread

Verfasst: Sonntag 17. März 2024, 12:28
von Knollo
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

Re: Zugriff auf GoogleSheets mit gspread

Verfasst: Sonntag 17. März 2024, 12:37
von sparrow
Füg einfach eine Zeile an.

Re: Zugriff auf GoogleSheets mit gspread

Verfasst: Sonntag 17. März 2024, 15:30
von __blackjack__
@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()

Re: Zugriff auf GoogleSheets mit gspread

Verfasst: Sonntag 17. März 2024, 23:31
von Knollo
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

Re: Zugriff auf GoogleSheets mit gspread

Verfasst: Montag 18. März 2024, 00:43
von sparrow
Und du nimmst jetzt nicht die Funktion zum Anfügen einer Zeile, weil?

Re: Zugriff auf GoogleSheets mit gspread

Verfasst: Montag 18. März 2024, 09:19
von Knollo
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

Re: Zugriff auf GoogleSheets mit gspread

Verfasst: Montag 18. März 2024, 11:45
von __blackjack__
@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. 🙄

Re: Zugriff auf GoogleSheets mit gspread

Verfasst: Montag 18. März 2024, 13:50
von Knollo
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

Re: Zugriff auf GoogleSheets mit gspread

Verfasst: Montag 18. März 2024, 16:22
von __blackjack__
@Knollo: Gleich die erste Antwort (von sparrow) verweist auf `append_row()`.