Interfaz sencilla para trabajar con Google Sheets.
Características:
pip install gspread
Requisitos: Python 3.8+.
Crear credenciales en la consola API de Google
Comience a usar 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á al final de su vida útil. gspread v6 requiere un mínimo de Python 3.8.
Worksheet.update
Los dos primeros argumentos ( values
y range_name
) se han intercambiado (a range_name
y values
). Cámbielos (funciona solo en v6) o use argumentos con nombre (funciona en v5 y v6).
Además, values
ya no pueden ser una lista y deben ser una matriz 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"]])
v6 utiliza representación de color hexadecimal. Cambia todos los colores a hexadecimal. Puede utilizar la función de compatibilidad gspread.utils.convert_colors_to_hex_value()
para convertir un diccionario en una cadena hexadecimal.
- 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
En la versión 6, ahora solo puede obtener todos los registros de la hoja utilizando Worksheet.get_all_records()
. Se ha eliminado el método Worksheet.get_records()
. Puede obtener algunos registros utilizando sus propias recuperaciones y combinarlos con 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)
En la versión 5 hay muchas advertencias para marcar características/funciones/métodos obsoletos. Se pueden silenciar estableciendo la variable de entorno GSPREAD_SILENCE_WARNINGS
en 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 )
Reciba solo las celdas con un valor en ellas.
>> > worksheet . get ( "A1:B4" )
[[ 'A1' , 'B1' ], [ 'A2' ]]
Reciba una matriz rectangular alrededor de las celdas con valores en ellas.
>> > worksheet . get ( "A1:B4" , pad_values = True )
[[ 'A1' , 'B1' ], [ 'A2' , '' ]]
Reciba una matriz que coincida con el tamaño de la solicitud independientemente de si los valores están vacíos o no.
>> > 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
)
Documentación: https://gspread.readthedocs.io/
La mejor manera de obtener una respuesta a una pregunta es preguntar en Stack Overflow con una etiqueta gspread.
Lista de contribuyentes
Asegúrese de tomarse un momento y leer el Código de conducta.
Informe errores y sugiera funciones a través de Problemas de GitHub.
Antes de abrir una incidencia, busque en el rastreador posibles duplicados. Si encuentra un duplicado, agregue un comentario que indique que usted también encontró el problema.
La documentación es tan importante como el código. Si sabe cómo hacerlo más consistente, legible y claro, envíe una solicitud de extracción. Los archivos de documentación están en la carpeta docs
, usan el marcado reStructuredText y son renderizados por Sphinx.
Asegúrese de leer la Guía de contribución antes de realizar una solicitud de extracción.