Einfache Benutzeroberfläche für die Arbeit mit Google Sheets.
Merkmale:
pip install gspread
Anforderungen: Python 3.8+.
Erstellen Sie Anmeldeinformationen in der Google API Console
Beginnen Sie mit der Verwendung von gspread
import gspread
gc = gspread . service_account ()
# Open a sheet from a spreadsheet in one go
wks = gc . open ( "Where is the money Lebowski?" ). sheet1
# Update a range of cells using the top left corner address
wks . update ([[ 1 , 2 ], [ 3 , 4 ]], "A1" )
# Or update a single cell
wks . update_acell ( "B42" , "it's down there somewhere, let me take another look." )
# Format the header
wks . format ( 'A1:B1' , { 'textFormat' : { 'bold' : True }})
Python 3.7 hat das Ende seiner Lebensdauer erreicht. gspread v6 erfordert mindestens Python 3.8.
Worksheet.update
Die ersten beiden Argumente ( values
& range_name
) wurden vertauscht (in range_name
& values
). Tauschen Sie sie entweder aus (funktioniert nur in Version 6) oder verwenden Sie benannte Argumente (funktioniert in Version 5 und 6).
Außerdem können values
keine Liste mehr sein, sondern müssen ein 2D-Array sein.
- file.sheet1.update([["new", "values"]])
+ file.sheet1.update([["new", "values"]]) # unchanged
- file.sheet1.update("B2:C2", [["54", "55"]])
+ file.sheet1.update([["54", "55"]], "B2:C2")
# or
+ file.sheet1.update(range_name="B2:C2", values=[["54", "55"]])
v6 verwendet eine hexadezimale Farbdarstellung. Ändern Sie alle Farben in Hex. Sie können die Kompatibilitätsfunktion gspread.utils.convert_colors_to_hex_value()
verwenden, um ein Wörterbuch in eine Hex-Zeichenfolge zu konvertieren.
- tab_color = {"red": 1, "green": 0.5, "blue": 1}
+ tab_color = "#FF7FFF"
file.sheet1.update_tab_color(tab_color)
- age = spreadsheet.lastUpdateTime
+ age = spreadsheet.get_lastUpdateTime()
Worksheet.get_records
In Version 6 können Sie jetzt alle Blattdatensätze nur mit Worksheet.get_all_records()
abrufen. Die Methode Worksheet.get_records()
wurde entfernt. Sie können einige Datensätze mit Ihren eigenen Abrufen abrufen und sie mit gspread.utils.to_records()
kombinieren.
+ from gspread import utils
all_records = spreadsheet.get_all_records(head=1)
- some_records = spreadsheet.get_all_records(head=1, first_index=6, last_index=9)
- some_records = spreadsheet.get_records(head=1, first_index=6, last_index=9)
+ header = spreadsheet.get("1:1")[0]
+ cells = spreadsheet.get("6:9")
+ some_records = utils.to_records(header, cells)
In Version 5 gibt es viele Warnungen, um veraltete Features/Funktionen/Methoden zu kennzeichnen. Sie können stummgeschaltet werden, indem Sie die Umgebungsvariable GSPREAD_SILENCE_WARNINGS
auf 1
setzen
gspread.Worksheet.__init__
hinzufügen gc = gspread.service_account(filename="google_credentials.json")
spreadsheet = gc.open_by_key("{{key}}")
properties = spreadsheet.fetch_sheet_metadata()["sheets"][0]["properties"]
- worksheet = gspread.Worksheet(spreadsheet, properties)
+ worksheet = gspread.Worksheet(spreadsheet, properties, spreadsheet.id, gc.http_client)
# You can open a spreadsheet by its title as it appears in Google Docs
sh = gc . open ( 'My poor gym results' ) # <-- Look ma, no keys!
# If you want to be specific, use a key (which can be extracted from
# the spreadsheet's url)
sht1 = gc . open_by_key ( '0BmgG6nO_6dprdS1MN3d3MkdPa142WFRrdnRRUWl1UFE' )
# Or, if you feel really lazy to extract that key, paste the entire url
sht2 = gc . open_by_url ( 'https://docs.google.com/spreadsheet/ccc?key=0Bm...FE&hl' )
sh = gc . create ( 'A new spreadsheet' )
# But that new spreadsheet will be visible only to your script's account.
# To be able to access newly created spreadsheet you *must* share it
# with your email. Which brings us to…
sh . share ( '[email protected]' , perm_type = 'user' , role = 'writer' )
# Select worksheet by index. Worksheet indexes start from zero
worksheet = sh . get_worksheet ( 0 )
# By title
worksheet = sh . worksheet ( "January" )
# Most common case: Sheet1
worksheet = sh . sheet1
# Get a list of all worksheets
worksheet_list = sh . worksheets ()
worksheet = sh . add_worksheet ( title = "A worksheet" , rows = "100" , cols = "20" )
sh . del_worksheet ( worksheet )
# With label
val = worksheet . get ( 'B1' ). first ()
# With coords
val = worksheet . cell ( 1 , 2 ). value
# Get all values from the first row
values_list = worksheet . row_values ( 1 )
# Get all values from the first column
values_list = worksheet . col_values ( 1 )
from gspread . utils import GridRangeType
list_of_lists = worksheet . get ( return_type = GridRangeType . ListOfLists )
Erhalten Sie nur die Zellen mit einem Wert darin.
>> > worksheet . get ( "A1:B4" )
[[ 'A1' , 'B1' ], [ 'A2' ]]
Erhalten Sie ein rechteckiges Array um die Zellen mit den darin enthaltenen Werten.
>> > worksheet . get ( "A1:B4" , pad_values = True )
[[ 'A1' , 'B1' ], [ 'A2' , '' ]]
Erhalten Sie ein Array, das der Anforderungsgröße entspricht, unabhängig davon, ob die Werte leer sind oder nicht.
>> > worksheet . get ( "A1:B4" , maintain_size = True )
[[ 'A1' , 'B1' ], [ 'A2' , '' ], [ '' , '' ], [ '' , '' ]]
# Find a cell with exact string value
cell = worksheet . find ( "Dough" )
print ( "Found something at R%sC%s" % ( cell . row , cell . col ))
# Find a cell matching a regular expression
amount_re = re . compile ( r'(Big|Enormous) dough' )
cell = worksheet . find ( amount_re )
# Find all cells with string value
cell_list = worksheet . findall ( "Rug store" )
# Find all cells with regexp
criteria_re = re . compile ( r'(Small|Room-tiering) rug' )
cell_list = worksheet . findall ( criteria_re )
# Update a single cell
worksheet . update_acell ( 'B1' , 'Bingo!' )
# Update a range
worksheet . update ([[ 1 , 2 ], [ 3 , 4 ]], 'A1:B2' )
# Update multiple ranges at once
worksheet . batch_update ([{
'range' : 'A1:B2' ,
'values' : [[ 'A1' , 'B1' ], [ 'A2' , 'B2' ]],
}, {
'range' : 'J42:K43' ,
'values' : [[ 1 , 2 ], [ 3 , 4 ]],
}])
from gspread . utils import ValueRenderOption
# Get formatted cell value as displayed in the UI
>> > worksheet . get ( "A1:B2" )
[[ '$12.00' ]]
# Get unformatted value from the same cell range
>> > worksheet . get ( "A1:B2" , value_render_option = ValueRenderOption . unformatted )
[[ 12 ]]
# Get formula from a cell
>> > worksheet . get ( "C2:D2" , value_render_option = ValueRenderOption . formula )
[[ '=1/1024' ]]
import gspread
from gspread . utils import ValidationConditionType
# Restrict the input to greater than 10 in a single cell
worksheet . add_validation (
'A1' ,
ValidationConditionType . number_greater ,
[ 10 ],
strict = True ,
inputMessage = 'Value must be greater than 10' ,
)
# Restrict the input to Yes/No for a specific range with dropdown
worksheet . add_validation (
'C2:C7' ,
ValidationConditionType . one_of_list ,
[ 'Yes' ,
'No' ,]
showCustomUi = True
)
Dokumentation: https://gspread.readthedocs.io/
Der beste Weg, eine Antwort auf eine Frage zu erhalten, besteht darin, eine Frage auf Stack Overflow mit einem Gspread-Tag zu stellen.
Liste der Mitwirkenden
Bitte nehmen Sie sich einen Moment Zeit und lesen Sie den Verhaltenskodex.
Bitte melden Sie Fehler und schlagen Sie Funktionen über die GitHub-Probleme vor.
Durchsuchen Sie den Tracker vor dem Öffnen eines Problems nach möglichen Duplikaten. Wenn Sie ein Duplikat finden, fügen Sie bitte einen Kommentar hinzu, der besagt, dass das Problem auch bei Ihnen aufgetreten ist.
Dokumentation ist genauso wichtig wie Code. Wenn Sie wissen, wie Sie es einheitlicher, lesbarer und klarer gestalten können, senden Sie bitte eine Pull-Anfrage. Die Dokumentationsdateien befinden sich im Ordner docs
, verwenden das reStructuredText-Markup und werden von Sphinx gerendert.
Bitte lesen Sie unbedingt den Contributing Guide, bevor Sie eine Pull-Anfrage stellen.