如何使用 google API for python 在特定文件夹下创建工作表?

bay*_*man 6 python google-sheets google-drive-api google-api-python-client google-sheets-api

我可以在“我的驱动器”的根目录中使用以下代码创建工作表,但如何在“我的驱动器”或“共享驱动器”中的文件夹下创建工作表?

from googleapiclient.discovery import build

service = build(‘sheets’, ‘v4’, credentials=creds)
sheet = service.spreadsheets()
body = {}
results = sheet.create(body=body).execute()
pprint(results)
Run Code Online (Sandbox Code Playgroud)

Tan*_*ike 11

  • 您想在特定文件夹中创建新电子表格。
  • 您想使用带有 python 的 google-api-python-client 来实现这一点。

如果我的理解是正确的,这个答案怎么样?

问题:

遗憾的是,在现阶段,无法使用 Sheets API 直接将新的电子表格创建到 Google Drive 的特定文件夹中。在这种情况下,需要使用 Drive API。

示例脚本:

在运行脚本之前,请设置文件夹 ID。

模式一:

在此模式中,新电子表格会直接创建到 Google Drive 中的特定文件夹中。为了创建电子表格,使用了 mimeType application/vnd.google-apps.spreadsheet

脚本:
drive = build('drive', 'v3', credentials=creds)
file_metadata = {
    'name': 'sampleName',
    'parents': ['### folderId ###'],
    'mimeType': 'application/vnd.google-apps.spreadsheet',
}
res = drive.files().create(body=file_metadata).execute()
print(res)
Run Code Online (Sandbox Code Playgroud)

模式2:

在此模式中,在 Sheets API 创建新电子表格后,电子表格将移动到您的 Google Drive 中的特定文件夹。

脚本:
# Create Spreadsheet to the root folder.
service = build('sheets', 'v4', credentials=creds)
sheet = service.spreadsheets()
body = {}
results = sheet.create(body=body).execute()
pprint(results)

# Move the created Spreadsheet to the specific folder.
drive = build('drive', 'v3', credentials=creds)
folderId = '### folderId ###'
res = drive.files().update(fileId=results['spreadsheetId'], addParents=folderId, removeParents='root').execute()
print(res)
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 对于这两个示例,请添加范围https://www.googleapis.com/auth/drive。并且在添加范围时,请删除创建的包含刷新令牌的凭据文件并重新授权。这样,额外的范围就会反映到刷新令牌中。
  • 如果要使用共享驱动器,请进行如下修改。
    • 对于模式 1
      • file_metadata = {'name': 'sampleName','parents': ['### folderId ###'],'mimeType': 'application/vnd.google-apps.spreadsheet','driveId': "###"}
      • res = drive.files().create(body=file_metadata, supportsAllDrives=True).execute()
    • 对于模式 2
      • res = drive.files().update(fileId=results['spreadsheetId'], body={'driveId': "###"}, addParents=folderId, removeParents='root', supportsAllDrives=True).execute()

参考:

如果我误解了您的问题并且这不是您想要的方向,我深表歉意。