72

Pythonを使用してGoogleドキュメント/スプレッドシートを読み書きする例を教えていただけないでしょうか。

ここでGoogle docs APIを見ましたhttps://developers.google.com/google-apps/spreadsheets/しかし、正しいリンクにアクセスしたかどうかはわかりません。また、例も非常に役立ちます。

私がやろうとしているのは、SQL クエリのようにさまざまな列に基づいてスプレッドシートをクエリし、データを使用してダウンストリーム解析を行い、それを別のスプレッドシートまたは Google ドキュメントのドキュメントに入れることです。

ベスト、-アビ

4

8 に答える 8

106

(2016 年 6 月から 12 月)ここでのほとんどの回答は、次ように古くなっています。すべての GData API が廃止されたわけではありませんが、新しいGoogle APIはすべてGoogle Data プロトコルを使用していませ。2) Googleは新しい Google Sheets API (GData ではありません) をリリースしました。新しい API を使用するには、Python 用の Google API クライアント ライブラリ( [またはPython 3 の場合] と同じくらい簡単です) を取得し、最新のSheets API v4+を使用する必要があります。pip install -U google-api-python-clientpip3、これは以前の API リリースよりもはるかに強力で柔軟です。

キックスタートに役立つ公式ドキュメントのコード サンプルを次に示しますただし、ここでは、API を使用して学ぶことができる、もう少し長く、より「実際の」例を示します (ビデオとブログ投稿)。

最新の Sheets API は、以前のリリースでは利用できなかった機能を提供します。つまり、ユーザー インターフェースを使用しているかのように開発者がシートにプログラムでアクセスできるようにします (固定された行の作成、セルの書式設定の実行、行/列のサイズ変更、ピボット テーブルの追加、グラフの作成など)。 .) ただし、検索を実行して選択した行を取得できるデータベースであるかのようにはなりません。基本的に、これを行う API の上にクエリ レイヤーを構築する必要があります。もう 1 つの方法は、 SQL に似たクエリをサポートする Google Charts Visualization API クエリ言語を使用することです。シート自体からクエリを実行することもできます。この機能は v4 API の前に存在し、セキュリティ モデルは2016 年 8 月に更新されたことに注意してください。. 詳細については、私の 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 ドキュメントに関する限り、現時点では REST API を利用できないため、プログラムでドキュメントにアクセスする唯一の方法は、Google Apps Scriptを使用することです(これは Node.js と同様にブラウザーの外部の JavaScript ですが、代わりにこれらのアプリはノード サーバーで実行され、Google のクラウドで実行されます。私の紹介ビデオもご覧ください。) Apps Script を使用すると、 Docs アプリまたは Docs のアドオン(および Sheets & Forms など)を構築できます。

UPDATE Jul 2018 : 上記の「ps」。はもはや真実ではありません。G Suite デベロッパー チームは、Google Cloud NEXT '18 で新しい Google Docs REST API を事前発表しました。新しい API の早期アクセス プログラムへの参加に関心のある開発者は、https://developers.google.com/docsで登録する必要があります。

2019 年 2 月の更新: 昨年 7 月にプレビュー用にリリースされた Docs API は、一般にすべてのユーザーが利用できるようになりました...詳細については、リリースの投稿をお読みください。

2019 年 11 月の更新: G Suite と GCP API を相互にインライン化する取り組みとして、今年初めに、すべての G Suite コード サンプルが GCP の新しい (製品ではない下位レベル) Python クライアント ライブラリと部分的に統合されました。auth が行われる方法は似ていますが、(現在) トークン ストレージを管理するために少し多くのコードが必要ですstorage.json。永続ストレージ。ここの読者は、更新された Python クイックスタートの例をご覧ください。pickletoken.pickle

于 2016-06-16T20:32:59.080 に答える
55

GitHub - gspreadを見てください。

非常に使いやすいことがわかりました。列全体を取得できるため、

first_col = worksheet.col_values(1)

と行全体

second_row = worksheet.row_values(2)

...基本的な選択を多かれ少なかれ... = ...簡単に構築できます。

于 2012-04-07T16:35:49.433 に答える
28

このスレッドが古いことはわかっていますが、ここに Google Docs API に関する適切なドキュメントがあります。見つけるのはばかばかしいほど難しかったですが、便利なので、役立つかもしれません。http://pythonhosted.org/gdata/docs/api.html .

最近、従業員の時間データをグラフ化するプロジェクトに gspread を使用しました。どれだけ役立つかわかりませんが、コードへのリンクは次のとおりです: https://github.com/lightcastle/employee-timecards

Gspread は私にとって物事をかなり簡単にしてくれました。また、さまざまな条件をチェックして月初および年初来の結果を作成するロジックを追加することもできました。しかし、私はダンスプレッドシート全体をインポートしてそこから解析しただけなので、それがまさにあなたが探しているものであることを100%確信していません. 幸運を祈ります。

于 2013-03-01T16:55:14.110 に答える
9

最新の google api docs には、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()
于 2016-09-13T04:13:41.413 に答える
-2

その API doc ページのセルベースのフィード セクションを見ていると思います。commands.getstatusoutput次に、 または のいずれかを使用して、Python スクリプト内で PUT/GET 要求を使用できますsubprocess

于 2012-03-13T20:46:02.163 に答える