Interface simple pour travailler avec Google Sheets.
Caractéristiques:
pip install gspread
Exigences : Python 3.8+.
Créer des informations d'identification dans la console API Google
Commencez à utiliser 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 est en fin de vie. gspread v6 nécessite au minimum Python 3.8.
Worksheet.update
Les deux premiers arguments ( values
& range_name
) ont été échangés (en range_name
& values
). Soit échangez-les (fonctionne dans la v6 uniquement), soit utilisez des arguments nommés (fonctionne dans les v5 et v6).
De plus, values
ne peuvent plus être une liste et doivent être un tableau 2D.
- 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"]])
La v6 utilise une représentation des couleurs hexadécimale. Changez toutes les couleurs en hexadécimal. Vous pouvez utiliser la fonction de compatibilité gspread.utils.convert_colors_to_hex_value()
pour convertir un dictionnaire en chaîne hexadécimale.
- 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
Dans la v6, vous ne pouvez désormais obtenir que tous les enregistrements de feuille, en utilisant Worksheet.get_all_records()
. La méthode Worksheet.get_records()
a été supprimée. Vous pouvez obtenir des enregistrements en utilisant vos propres récupérations et les combiner avec gspread.utils.to_records()
.
+ 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)
Dans la version 5, il existe de nombreux avertissements pour marquer les fonctionnalités/fonctions/méthodes obsolètes. Ils peuvent être réduits au silence en définissant la variable d'environnement GSPREAD_SILENCE_WARNINGS
sur 1
gspread.Worksheet.__init__
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 )
Recevez uniquement les cellules contenant une valeur.
>> > worksheet . get ( "A1:B4" )
[[ 'A1' , 'B1' ], [ 'A2' ]]
Recevez un tableau rectangulaire autour des cellules contenant des valeurs.
>> > worksheet . get ( "A1:B4" , pad_values = True )
[[ 'A1' , 'B1' ], [ 'A2' , '' ]]
Recevez un tableau correspondant à la taille de la requête, que les valeurs soient vides ou non.
>> > 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
)
Documentation : https://gspread.readthedocs.io/
La meilleure façon d'obtenir une réponse à une question est de la poser sur Stack Overflow avec une balise gspread.
Liste des contributeurs
Assurez-vous de prendre un moment et de lire le code de conduite.
Veuillez signaler les bogues et suggérer des fonctionnalités via les problèmes GitHub.
Avant d'ouvrir un ticket, recherchez dans le tracker d'éventuels doublons. Si vous trouvez un doublon, veuillez ajouter un commentaire indiquant que vous avez également rencontré le problème.
La documentation est aussi importante que le code. Si vous savez comment le rendre plus cohérent, lisible et clair, veuillez soumettre une pull request. Les fichiers de documentation se trouvent dans le dossier docs
, utilisent le balisage reStructuredText et rendus par Sphinx.
Veuillez vous assurer de lire le guide de contribution avant de faire une pull request.