Google ドライブに空の Google スプレッドシート (メタデータのみで作成) を作成したいと考えています。Google SpreadSheet APIのドキュメントを参照すると、DocumentsList API を使用するように記載されていますが、非推奨であり、代わりに Google Drive API を使用するように求められます。Drive API ドキュメントでは、空のシートを作成する方法が見つかりませんでした。誰でもこれを行う方法の手がかりを持っていますか?
5 に答える
MIME タイプを次のように設定することで、 Drive APIを使用してこれを行うことができます。application/vnd.google-apps.spreadsheet
これを Python で行うには:
from apiclient.discovery import build
service = build('drive', 'v2')
import httplib2
credentials = ... # Obtain OAuth 2.0 credentials
http = credentials.authorize(httplib2.Http())
body = {
'mimeType': 'application/vnd.google-apps.spreadsheet',
'title': 'Name of Spreadsheet',
}
file = service.files().insert(body=body).execute(http=http)
# or for version 3 it would be
# file = service.files().create(body=body).execute(http=http)
Google API Explorerにアクセスして試してみてください。
(2016 年 7 月)上記の BossyLobsterの回答は引き続き有効です (Drive API v2 は[まだ] 廃止されていないため) 。ただし、以下は、同じことを行うより現代的な方法と、理解に役立ついくつかのビデオです。
以下の両方の例の認可ボイラープレート
from googleapiclient import discovery
from httplib2 import Http
from oauth2client import file, client, tools
store = file.Storage('storage.json')
creds = store.get()
if not creds or creds.invalid:
flow = client.flow_from_clientsecrets('client_secret.json', SCOPES)
creds = tools.run_flow(flow, store)
注: API プロジェクトと OAuth2 資格情報を作成し、それらの資格情報をclient_secret.json
(またはclient_id.json
) ファイルにダウンロードするには、Google Developers Consoleにアクセスしてください。
- 開発者コンソールの使用方法については、このビデオを参照してください。
- この定型認証コードについては、このビデオを参照してください。(注: 上記のボイラープレートは、ビデオのコードより少し新しく/改善されています)
- Google Drive API v2 の使用 (ドライブ ファイルの一覧表示) の概要については、このビデオを参照してください。
- Google Drive API v3 (ファイルのアップロード/ダウンロード) については、このブログ投稿とビデオを参照してください。(注: v2 と v3 は共存しています... v2 はまだ廃止されていません。v3: API 呼び出しが少なく、v2 よりもパフォーマンスが優れています)
- Google Sheets API v4 (SQL データのシートへの移行) については、このブログ投稿とビデオを参照してください。
Google Drive API v3 (および v2)を使用して新しい/空白のシートを作成する
# above: SCOPES = 'https://www.googleapis.com/auth/drive.file'
DRIVE = discovery.build('drive', 'v3', http=creds.authorize(Http()))
data = {
'name': 'My new Sheet',
'mimeType': 'application/vnd.google-apps.spreadsheet',
}
sheet = DRIVE.files().create(body=data).execute() # insert() for v2
Google Sheets API v4を使用して新しい/空白のシートを作成する
# above: SCOPES = 'https://www.googleapis.com/auth/spreadsheets'
SHEETS = discovery.build('sheets', 'v4', http=creds.authorize(Http()))
data = {'properties': {'title': 'My new Sheet'}}
sheet = SHEETS.spreadsheets().create(body=data).execute()
ここで、「空白のシートを作成する方法が 2 つあるのはなぜですか?」と疑問に思われるかもしれません。簡潔に言うと、Sheets API は、主にスプレッドシート指向の操作、つまり、データの挿入、スプレッドシートの行の読み取り、セルの書式設定、グラフの作成、ピボット テーブルの追加などを対象としており、作成/削除やインポートなどのファイル指向のリクエストは対象としていません。 /export で、Drive API を使用するのが適切です。たまたま create が両方のようなものであるため、それを行うには 2 つの方法があります。
スプレッドシートを作成するための API リファレンスはhttps://developers.google.com/sheets/reference/rest/v4/spreadsheets/createにあります。
新しいスプレッドシートを作成するためのコード スニペットは次のとおりです。
String[] SCOPES = { SheetsScopes.SPREADSHEETS };
GoogleAccountCredential credential = GoogleAccountCredential.usingOAuth2(
getApplicationContext(),
Arrays.asList(SCOPES)).setBackOff(new ExponentialBackOff());
credential.setSelectedAccountName("your_google_account@gmail.com");
HttpTransport transport = AndroidHttp.newCompatibleTransport();
JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
com.google.api.services.sheets.v4.Sheets service =
new com.google.api.services.sheets.v4.Sheets.Builder(
transport,
jsonFactory,
credential)
.setApplicationName("Google Sheets API Android Quickstart")
.build();
Spreadsheet spreadsheet = new Spreadsheet();
SpreadsheetProperties properties = new SpreadsheetProperties();
properties.setTitle("SpreadSheetTitle");
spreadsheet.setProperties(properties);
service.spreadsheets().create(spreadsheet).execute()
私が書いたpygsheetsライブラリを試すこともできます。もちろん、スプレッドシートを作成するだけでなく、より多くの機能を提供します。
import pygsheets
gc = pygsheets.authorize(outh_file='client_secret.json')
# Open spreadsheet and then worksheet
gc.create('my new sheet')
提案された方法は私にはうまくいきませんでしたが、次のコードはうまくいきます:
# requires: uid='example@gmail.com', pass1='password',
# name_spr='name_of_spreadsheet'
import gdata.docs.client
docs_client = gdata.docs.client.DocsClient()
docs_client.ClientLogin(uid, pass1, 'any')
document = gdata.docs.data.Resource(type='spreadsheet', title=name_spr)
resource = docs_client.CreateResource(document)
full_id = resource.resource_id.text # returned by gdata
gs_id = full_id[len('spreadsheet:'):]