15

我想在 Google Drive 中创建一个空的 Google Sheet(仅使用元数据创建)。当我提到 Google SpreadSheet API文档时,它说要使用 DocumentsList API,但它已被弃用,而是要求我使用 Google Drive API。在 Drive API 文档中,我找不到任何创建空工作表的方法。任何人都知道如何做到这一点?

4

5 回答 5

29

您可以通过将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 APIs Explorer试试吧!

于 2013-01-04T19:21:02.023 回答
13

(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

  • 要了解如何使用 Developers Console,请观看此视频
  • 要浏览此样板授权代码,请参阅此视频。(注意:上面的样板比视频中的代码稍微更新/改进)
  • 要了解如何使用 Google Drive API v2(列出您的 Drive 文件),请观看此视频
  • 要了解 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()

现在您可能会问,“为什么有两种不同的方法来创建空白工作表?” 简而言之,Sheets API 主要用于面向电子表格的操作,即插入数据、读取电子表格行、单元格格式、创建图表、添加数据透视表等,而不是面向文件的请求,如创建/删除和导入/export,其中 Drive API 是正确使用的 API。碰巧 create 两者兼而有之,因此有两种方法可以做到这一点。

于 2016-07-13T19:10:48.397 回答
1

创建电子表格的 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()
于 2016-07-06T02:34:23.377 回答
1

你也可以试试我写的pygsheets库,它当然提供了比创建电子表格更多的功能,

import pygsheets

gc = pygsheets.authorize(outh_file='client_secret.json')

# Open spreadsheet and then worksheet
gc.create('my new sheet')
于 2016-11-27T14:34:45.027 回答
0

建议的方法对我不起作用,但以下代码有效:

# 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:'):]
于 2014-12-16T18:46:44.173 回答