update - 如何使用Python訪問(讀取,寫入)Google表格電子表格?




python spreadsheet (4)

(2016年6月至12月)此處的大多數答案現在已經過時了:1) GData API是上一代Google API,這就是為什麼@Josh Brown很難找到舊的GData Docs API文檔。 雖然並非所有GData API都已被棄用,但所有較新的 Google API 都不使用Google數據協議 ; 2)谷歌發布了新的Google表格API (不是GData)。 要使用新的API,您需要獲取適用於Python的Google API客戶端庫 (它就像pip install -U google-api-python-client [或Python 3的pip3 ]一樣簡單)並使用最新的Sheets API v4 + ,比舊的API版本更強大,更靈活。

以下是官方文檔中的一個代碼示例 ,可幫助您快速啟動。 但是,這裡有一些使用您可以學習的API的更“真實”的例子(視頻和博客文章):

最新的Sheets API提供舊版本中不可用的功能,即為開發人員提供對Sheet的編程訪問,就像使用用戶界面一樣(創建凍結行,執行單元格格式化,調整行/列大小,添加數據透視表,創建圖表等) 。),但不是好像是某個數據庫,你可以執行搜索並從中獲取選定的行。 您基本上必須在API之上構建一個查詢層來執行此操作。 另一種方法是使用Google Charts Visualization API查詢語言 ,該語言支持類似SQL的查詢 。 您也可以從工作表本身進行查詢 。 請注意,此功能在v4 API之前存在,並且安全模型已於20168月更新 。 要了解詳情,請查看我的G +轉發到 Google Developer Expert的完整報告

另請注意,Sheets API主要用於以編程方式訪問上述電子表格操作和功能,但要執行文件訪問 ,如導入/導出,複製,移動,重命名等,請改用Google Drive API 。 使用Drive API的示例:

(*) - TL; DR:將純文本文件上傳到雲端硬盤,導入/轉換為Google文檔格式,然後將該文檔導出為PDF格式。 上面的帖子使用Drive API v2; 這篇後續文章描述了將其遷移到Drive API v3,這是一個結合了“窮人的轉換器”帖子的開發者視頻

要了解有關如何在Python中使用Google API的更多信息,請查看我的博客以及我正在製作的各種Google開發者視頻( 系列1系列2 )。

PS。 就Google Docs而言,目前還沒有可用的REST API,因此以編程方式訪問Doc的唯一方法是使用Google Apps腳本 (類似Node.js是瀏覽器之外的JavaScript,而不是在節點服務器上運行,這些應用程序在Google的雲中運行;還可以查看我的介紹視頻 。)使用Apps腳本,您可以為Docs (以及其他內容,如表格和表格)構建文檔應用程序附加組件

我想知道你是否可以給我一個使用python閱讀/寫入谷歌文檔/電子表格的例子。

我確實在這裡查看了google docs API https://developers.google.com/google-apps/spreadsheets/但不確定我是否點擊了正確的鏈接。 一個例子也會有很大的幫助。

我想要做的是查詢基於不同列的電子表格,更像是SQL查詢,然後對數據進行一些下游解析,並將其放入google docs中的另一個電子表格或doc。

最好的,-Abhi


我想您正在查看該API文檔頁面中基於單元格的供稿部分。 然後,您可以使用commands.getstatusoutputsubprocess在Python腳本中使用PUT / GET請求。


最新的谷歌api文檔記錄瞭如何使用python寫入電子表格,但導航有點困難。 這是一個如何追加的示例的鏈接。

以下代碼是我第一次成功嘗試附加到Google電子表格。

import httplib2
import os

from apiclient import discovery
import oauth2client
from oauth2client import client
from oauth2client import tools

try:
    import argparse
    flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args()
except ImportError:
    flags = None

# If modifying these scopes, delete your previously saved credentials
# at ~/.credentials/sheets.googleapis.com-python-quickstart.json
SCOPES = 'https://www.googleapis.com/auth/spreadsheets'
CLIENT_SECRET_FILE = 'client_secret.json'
APPLICATION_NAME = 'Google Sheets API Python Quickstart'


def get_credentials():
    """Gets valid user credentials from storage.

    If nothing has been stored, or if the stored credentials are invalid,
    the OAuth2 flow is completed to obtain the new credentials.

    Returns:
        Credentials, the obtained credential.
    """
    home_dir = os.path.expanduser('~')
    credential_dir = os.path.join(home_dir, '.credentials')
    if not os.path.exists(credential_dir):
        os.makedirs(credential_dir)
    credential_path = os.path.join(credential_dir,
                                   'mail_to_g_app.json')

    store = oauth2client.file.Storage(credential_path)
    credentials = store.get()
    if not credentials or credentials.invalid:
        flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)
        flow.user_agent = APPLICATION_NAME
        if flags:
            credentials = tools.run_flow(flow, store, flags)
        else: # Needed only for compatibility with Python 2.6
            credentials = tools.run(flow, store)
        print('Storing credentials to ' + credential_path)
    return credentials

def add_todo():
    credentials = get_credentials()
    http = credentials.authorize(httplib2.Http())
    discoveryUrl = ('https://sheets.googleapis.com/$discovery/rest?'
                    'version=v4')
    service = discovery.build('sheets', 'v4', http=http,
                              discoveryServiceUrl=discoveryUrl)

    spreadsheetId = 'PUT YOUR SPREADSHEET ID HERE'
    rangeName = 'A1:A'

    # https://developers.google.com/sheets/guides/values#appending_values
    values = {'values':[['Hello Saturn',],]}
    result = service.spreadsheets().values().append(
        spreadsheetId=spreadsheetId, range=rangeName,
        valueInputOption='RAW',
        body=values).execute()

if __name__ == '__main__':
    add_todo()

看看GitHub - gspread

我發現它非常容易使用,因為你可以檢索整個列

first_col = worksheet.col_values(1)

並且整整一個

second_row = worksheet.row_values(2)

你可以或多或少地建立一些基本的選擇...其中... = ...很容易。





google-sheets-api