3

python-gdata を使用してワークシートをスプレッドシートに入力しようとしています。問題は、個々のセルの更新が非常に遅いことです。(一度に 1 つずつ実行すると、各リクエストには約 500 ミリ秒かかります!) したがって、gdata に組み込まれているバッチ メカニズムを使用して速度を上げようとしています。

問題は、新しいセルを挿入できないように見えることです。Web で例を探しましたが、見つかりませんでした。これは、ドキュメントの例から適応させた私のコードです。(ドキュメントには実際にセルを挿入する方法は記載されていませんが、セルを更新する方法は示されています。これは新しいワークシートであるため、セルはありません。)

さらに、デバッグを有効にすると、リクエストが HTTP 200 OK を返すことがわかります。


import time
import gdata.spreadsheet
import gdata.spreadsheet.service
import gdata.spreadsheets.data

email = '<snip>'
password = '<snip>'
spreadsheet_key = '<snip>'
worksheet_id = 'od6'

spr_client = gdata.spreadsheet.service.SpreadsheetsService()
spr_client.email = email
spr_client.password = password
spr_client.source = 'Example Spreadsheet Writing Application'
spr_client.ProgrammaticLogin()

#  create a cells feed and batch request
cells = spr_client.GetCellsFeed(spreadsheet_key, worksheet_id)
batchRequest = gdata.spreadsheet.SpreadsheetsCellsFeed()

#  create a cell entry
cell_entry = gdata.spreadsheet.SpreadsheetsCell()
cell_entry.cell = gdata.spreadsheet.Cell(inputValue="foo", text="bar", row='1', col='1')

#  add the cell entry to the batch request
batchRequest.AddInsert(cell_entry)

#  submit the batch request
updated = spr_client.ExecuteBatch(batchRequest, cells.GetBatchLink().href)

私の直感では、私は単に API を誤解しているだけであり、これは変更によって機能するはずです。どんな助けでも大歓迎です。

4

2 に答える 2

2

私は最近これにも遭遇しました(削除しようとしたとき)が、ここinsertのドキュメントによると、バッチまたはdelete操作がサポートされているようには見えません:

多数のバッチ操作を1つのリクエストに組み合わせることができます。サポートされている2種類のバッチ操作は、クエリと更新です。 セルフィードを使用してセルを挿入または削除することはできないため、挿入および削除はサポートされていません。そのためには、ワークシートフィードを使用する必要があることに注意してください。

あなたのユースケースはわかりませんが、ListFeedヘルプを使用しますか?それでもバッチ操作はできないため、関連するレイテンシーが発生しますが、現在処理している(または当時の)処理よりも許容範囲が広い場合があります。

于 2012-10-04T19:44:10.190 に答える
0

Google I/O 2016の時点で、最新のGoogle Sheets APIはバッチ セル更新 (および読み取り) をサポートしています。ただし、新しい API は GData ではないため、上記のサンプルを含め、ほとんどのGData ベースの APIとともに、GDataは非推奨になっていることに注意してください。また、電子メール アドレスとパスワードをプレーン テキストでコードに入れることはセキュリティ リスクになるため、新しい (より新しい) Google APIは認証にOAuth2を使用します。Python 用の最新の Google API クライアント ライブラリを入手する必要があります。[またはPython 3の場合] と同じくらい簡単です。pip install -U google-api-python-clientpip3

バッチ挿入に関する限り、簡単なコード サンプルを次に示します。に複数行のデータがあるとしrowsます。これをシートに大量に挿入するには、たとえばファイル ID を使用SHEET_IDして cell の左上から開始するには、次のA1ように 1 回呼び出します。

SHEETS.spreadsheets().values().update(spreadsheetId=SHEET_ID, range='A1',
        body={'values': rows}, valueInputOption='RAW').execute()

より長い例が必要な場合は、これらの行がリレーショナル データベースから読み取られる、以下の最初のビデオを参照してください。この API を初めて使用する方のために、公式ドキュメントのコード サンプルを 1 つ紹介します。少し長く、より「現実的な」例については、次のビデオとブログ投稿を参照してください。

最新の Sheets API は、以前のリリースでは利用できなかった機能を提供します。つまり、ユーザー インターフェースを使用しているかのように、プログラムによるドキュメント指向のシートへのアクセスを開発者に提供します (固定された行の作成、セルの書式設定の実行、行/列のサイズ変更、ピボット テーブルの追加、作成チャートなど)

ただし、 インポート/エクスポート、コピー、移動、名前の変更など、スプレッドシートでファイルレベルのアクセスを実行するには、 Google Drive APIを使用します。Drive API の使用例:

  • Google スプレッドシートを CSV としてエクスポートする (ブログ投稿)
  • 「貧乏人のプレーンテキストからPDFへ」コンバーター(ブログ投稿)(*)

(*) - TL;DR: プレーン テキスト ファイルをドライブにアップロードし、Google ドキュメント形式にインポート/変換してから、そのドキュメントを PDF としてエクスポートします。上記の投稿では Drive API v2 を使用しています。このフォローアップ投稿では、Drive API v3 への移行について説明しています。これは、両方の「貧乏人のコンバーター」投稿を組み合わせた開発者向けビデオです。

于 2017-03-08T00:32:48.637 に答える