واجهة بسيطة للعمل مع جداول بيانات Google.
سمات:
pip install gspread
المتطلبات: بايثون 3.8+.
قم بإنشاء بيانات الاعتماد في وحدة تحكم Google API
ابدأ باستخدام 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 }})
بايثون 3.7 هو نهاية العمر. يتطلب gspread v6 الحد الأدنى من Python 3.8.
Worksheet.update
تم تبديل الوسيطتين الأوليين ( values
& range_name
) (إلى range_name
& values
). قم إما بتبديلها (يعمل في الإصدار 6 فقط)، أو استخدم الوسائط المسماة (يعمل في الإصدارين 5 و6).
كذلك، لم يعد من الممكن أن تكون values
عبارة عن قائمة، ويجب أن تكون مصفوفة ثنائية الأبعاد.
- 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"]])
يستخدم الإصدار 6 تمثيل الألوان الست عشري. تغيير كافة الألوان إلى عرافة. يمكنك استخدام وظيفة التوافق gspread.utils.convert_colors_to_hex_value()
لتحويل قاموس إلى سلسلة سداسية عشرية.
- 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
في الإصدار السادس، يمكنك الآن الحصول على جميع سجلات الأوراق فقط، باستخدام Worksheet.get_all_records()
. تمت إزالة طريقة Worksheet.get_records()
. يمكنك الحصول على بعض السجلات باستخدام عمليات الجلب الخاصة بك ودمجها مع 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)
يوجد في الإصدار 5 العديد من التحذيرات لوضع علامة على الميزات/الوظائف/الأساليب المهملة. يمكن إسكاتها عن طريق ضبط متغير البيئة GSPREAD_SILENCE_WARNINGS
على 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 )
تلقي فقط الخلايا التي تحتوي على قيمة فيها.
>> > worksheet . get ( "A1:B4" )
[[ 'A1' , 'B1' ], [ 'A2' ]]
تلقي مصفوفة مستطيلة حول الخلايا التي تحتوي على قيم.
>> > worksheet . get ( "A1:B4" , pad_values = True )
[[ 'A1' , 'B1' ], [ 'A2' , '' ]]
تلقي مصفوفة مطابقة لحجم الطلب بغض النظر عما إذا كانت القيم فارغة أم لا.
>> > 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
)
الوثائق: https://gspread.readthedocs.io/
أفضل طريقة للحصول على إجابة لسؤال ما هي طرح سؤال على Stack Overflow باستخدام علامة gspread.
قائمة المساهمين
يرجى التأكد من تخصيص بعض الوقت وقراءة قواعد السلوك.
الرجاء الإبلاغ عن الأخطاء واقتراح الميزات عبر مشكلات GitHub.
قبل فتح العدد، ابحث في المتتبع عن التكرارات المحتملة. إذا وجدت نسخة مكررة، يرجى إضافة تعليق يفيد بأنك واجهت المشكلة أيضًا.
التوثيق لا يقل أهمية عن التعليمات البرمجية. إذا كنت تعرف كيفية جعلها أكثر اتساقًا وقابلية للقراءة والوضوح، فيرجى إرسال طلب سحب. ملفات الوثائق موجودة في مجلد docs
، استخدم علامة reStructuredText وتم تقديمها بواسطة Sphinx.
يرجى التأكد من قراءة دليل المساهمة قبل تقديم طلب السحب.