0.0 前言
? ? ? ? 使用Python操作micrsoft offce實(shí)現(xiàn)辦公自動(dòng)化能夠極大的提高工作效率,包括 excel、word、powerpoint等。Google提供了功能超級(jí)完整的在線office軟件系統(tǒng),方便文件數(shù)據(jù)的共享、管理和更新,而使用Python通過調(diào)用google api同樣可是實(shí)現(xiàn)自動(dòng)化辦公。
? ? ? ?Google提供官方api用于Python調(diào)用(ref: https://developers.google.com/sheets/api/quickstart/python),但官方api太不友好,因此選擇第三方的gspread庫實(shí)現(xiàn)(ref: https://gspread.readthedocs.io/en/latest/index.html#)。網(wǎng)上還有很多教程使用的是gdata庫,但gdata庫只支持Python 2.X,而且已經(jīng)停更很多年,就不推薦了。
1.0 申請(qǐng)API使用權(quán)限
? ? ? ? (默認(rèn)用戶已經(jīng)擁有谷歌賬戶并且使用過google spreadsheets,知道如何分享、使用文檔,并且已安裝gspread)
1.1 新建API項(xiàng)目
? ? ? ? 前往谷歌開發(fā)者控制臺(tái),找到下圖的內(nèi)容,點(diǎn)擊【新建項(xiàng)目】。由于我已經(jīng)有建立好的項(xiàng)目,因此新建項(xiàng)目的界面可能和首次嘗試的用戶不太一樣,稍微找一下就可以(英文頁面的話可以在右上角的“三個(gè)點(diǎn)”中的偏好設(shè)置進(jìn)行修改)。

? ? ? ? 點(diǎn)擊【新建項(xiàng)目】后,可以看到如下的界面。然后填寫項(xiàng)目名稱和組織名稱(可選)即可,我這里給項(xiàng)目命名為Auto-Spreadsheet-01。填寫完成后,點(diǎn)擊【創(chuàng)建】按鈕。

1.2 啟用相關(guān)API服務(wù)
? ? ? ??在項(xiàng)目中啟用相關(guān)API服務(wù)。這里需要先確定已選定項(xiàng)目Auto-Spreadsheet-01,可以觀察左上角是否出現(xiàn)相應(yīng)項(xiàng)目的名稱。若不是我們要求的項(xiàng)目,點(diǎn)擊項(xiàng)目名稱會(huì)出現(xiàn)項(xiàng)目菜單,選擇即可。

? ? ? ? 確認(rèn)項(xiàng)目后,點(diǎn)擊搜索欄下方的【+ENABLE APIS AND SERVICES】,找到Google Sheets API和Google Drive API,然后【啟用】,API圖標(biāo)如下(其實(shí)也可以直接從最上方的搜索欄中檢索激活,感覺更方便)。


1.3 創(chuàng)建API調(diào)用憑據(jù)
? ? ? ??從左側(cè)的導(dǎo)航欄中點(diǎn)擊【憑據(jù)】進(jìn)入,然后【創(chuàng)建憑據(jù)】,選擇【OAuth客戶端ID】。

? ? ? ? 選擇應(yīng)用類型為【桌面應(yīng)用】,名稱可以按自己意愿設(shè)置(我設(shè)置成了“桌面客戶端-auto-spreadsheet”),然后單擊【創(chuàng)建】,會(huì)彈出“OAuth 客戶端已創(chuàng)建”的提示框,里面是憑據(jù)內(nèi)容,可以無視,繼續(xù)單擊【確定】。

? ? ? ??憑據(jù)創(chuàng)建完成后,會(huì)回到前面的“憑據(jù)”界面,可以看到剛才創(chuàng)建的憑據(jù)信息,點(diǎn)擊最右側(cè)的【向下箭頭】,把憑據(jù)信息下載下來,并改名為credentials.json。

1.4 設(shè)置gspread使用憑據(jù)
? ? ? ??把憑據(jù)信息放在gspread相應(yīng)的文件夾內(nèi)。要使用gspread調(diào)用google API就需要gspread使用剛剛創(chuàng)建好的憑據(jù),現(xiàn)在要把憑據(jù)交給gspread。根據(jù)官網(wǎng)的說明,憑據(jù)應(yīng)放在【%APPDATA%\gspread\credentials.json】文件夾內(nèi)(APPDATA是windows用戶下面的隱藏文件夾),但在我操作過程中實(shí)際是把憑據(jù)放在了【%APPDATA%\Roaming\gspread\credentials.json】內(nèi),具體情況可以根據(jù)代碼反饋來看,如果gspread沒有得到憑據(jù),在運(yùn)行代碼時(shí)會(huì)報(bào)錯(cuò),并且把準(zhǔn)確的文件夾放置信息報(bào)出來,如下圖。

1.5 試驗(yàn)效果
? ? ? ? 打開編輯器,建立代碼腳本test.py,把以下代碼復(fù)制進(jìn)去。
import gspread
gc = gspread.oauth()
sh = gc.open("commentary data")? ? ?
print(sh.sheet1.get('A1'))
? ? ? ? 若程序運(yùn)行成功,會(huì)自動(dòng)新開一個(gè)網(wǎng)頁,并申請(qǐng)一系列授權(quán),點(diǎn)擊【允許】和【確定】即可,如下圖:

? ? ? ? 這里打開的是一個(gè)公開的google spreadsheet,名稱為“commentary data”,地址為
https://docs.google.com/spreadsheets/d/1ww2UcaIz19H_1MRJLmCLp6UGQMvg1_xg65yrn0uZ0rQ/edit#gid=0。
? ? ? ? 若代碼運(yùn)行成功,將會(huì)返回A1單元格的內(nèi)容:[['Batsman']]。
2.0 總結(jié)說明
????????gspread提供了兩種api調(diào)用方式,一種是bot account,一種是end users。本文介紹的是end users使用方式,即api的使用者是個(gè)人,這種方式會(huì)定期要求對(duì)google文檔訪問的授權(quán)(每次授權(quán)有有效期,機(jī)制類似網(wǎng)站登錄的緩存一樣);但bot account相當(dāng)于建立了一個(gè)機(jī)器人賬戶,無需多次授權(quán),但需要將google 文檔的分享給該賬戶,此后就可以無限制訪問。但考慮本人的使用場景,選擇了end users模式。
? ? ? ? 至此說明已成功使用python通過gspread實(shí)現(xiàn)了google spreadsheet訪問,關(guān)于gspread的方法在后文中繼續(xù)介紹。