开发者社区> 问答> 正文

用多个工作表创建Google工作表

我尝试使用Google Drive API将Google表格创建到指定文件夹中。我的以下代码工作正常,但我要创建包含多个工作表的文件。我已经尝试过properties。但是,它仍显示为Sheet1

file_metadata = {'properties': {'title': 'test title'}, 'name': 'google sheets filename', 'parents': [google_folder_id], 'mimeType': 'application/vnd.google-apps.spreadsheet', }
google_sheets_metadata = self.__service.files().create(body=file_metadata).execute()

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 13:57:29 569 0
1 条回答
写回答
取消 提交回答
    • You want to create new Spreadsheet to the specific folder.
    • You want to create new Spreadsheet by creating multiple worksheets.
    • You want to achieve this using googleapis with python.
    • You have already been able to use Drive API.

    如果我的理解是正确的,那么这个答案呢?请认为这只是几个可能的答案之一。

    问题和解决方法:

    Drive API可以直接创建电子表格。但是在这种情况下,不能使用多个工作表创建电子表格。因此,在这种情况下,还必须使用Sheets API。

    在使用以下脚本之前,请启用Sheets API。并将“ https://www.googleapis.com/auth/spreadsheets ” 添加到范围。在这种情况下,请删除包含访问令牌的凭证文件(token.pickle)和刷新令牌,然后再次授权。这样,新的作用域得以体现。请注意这一点。

    模式1:

    在这种模式下,使用Drive API的create方法将电子表格创建到特定文件夹后,使用Sheets API的batchUpdate方法将2个工作表添加到创建的电子表格中。

    示例脚本: sheets = build('sheets', 'v4', credentials=creds) drive = build('drive', 'v3', credentials=creds)

    google_folder_id = '###'
    file_metadata = {'properties': {'title': 'test title'}, 'name': 'google sheets filename', 'parents': [google_folder_id], 'mimeType': 'application/vnd.google-apps.spreadsheet'}
    google_sheets_metadata = drive.files().create(body=file_metadata).execute()
    fileId = google_sheets_metadata['id']
    body = {"requests": [{"addSheet": {}}, {"addSheet": {"properties": {"title": "sampleSheet"}}}]}
    res = sheets.spreadsheets().batchUpdate(spreadsheetId=fileId, body=body).execute()
    print(res)
    
    • In this case, the 3rd sheet name is ` sampleSheet ` as a sample. 模式2:

    在这种模式下,使用Sheets API的创建方法将电子表格创建到具有3个工作表的根文件夹之后,使用Drive API的更新方法将创建的电子表格移动到特定文件夹。

    示例脚本: sheets = build('sheets', 'v4', credentials=creds) drive = build('drive', 'v3', credentials=creds)

    google_folder_id = '###'
    body = {"properties": {"title": "sampleSpreadsheet"}, "sheets": [{}, {}, {"properties": {"title": "sampleSheet"}}]}
    res = sheets.spreadsheets().create(body=body).execute()
    spreadsheetId = res['spreadsheetId']
    google_sheets_metadata = drive.files().update(fileId=spreadsheetId, removeParents='root', addParents=google_folder_id).execute()
    
    • In this case, the 3rd sheet name is ` sampleSheet ` as a sample. 注意:
    • In above scripts, it supposes that your script for authorizing works. 参考文献:
    • Files: create
    • Method: spreadsheets.batchUpdate
    • Method: spreadsheets.create
    • Files: update

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

    添加:

    当您要使用模式1并希望将工作表名称“ a”和“ b”赋予第一和第二选项卡时,脚本如下。

    使用Drive API创建新的电子表格时,创建的电子表格具有1st标签。因此,在您的情况下,需要将第一张工作表重命名为“ a”并添加一个名称为“ b”的工作表。

    sheets = build('sheets', 'v4', credentials=creds)
    drive = build('drive', 'v3', credentials=creds)
    
    google_folder_id = '###'
    file_metadata = {'properties': {'title': 'test title'}, 'name': 'google sheets filename', 'parents': [google_folder_id], 'mimeType': 'application/vnd.google-apps.spreadsheet'}
    google_sheets_metadata = drive.files().create(body=file_metadata).execute()
    fileId = google_sheets_metadata['id']
    
    title = [{"addSheet": {"properties": {"title": name}}} for name in set(['b'])]
    title.append({"updateSheetProperties": {"fields": "title", "properties": {"title": "a", "index": 0}}})
    body = {"requests": title}
    res = sheets.spreadsheets().batchUpdate(spreadsheetId=fileId, body=body).execute()
    print(res)
    

    回答来源:stackoverflow

    2020-03-24 13:57:39
    赞同 展开评论 打赏
问答分类:
API
问答地址:
问答排行榜
最热
最新

相关电子书

更多
重新出发:阿里云数据库开源整体策略 立即下载
Facebook Online Schema Change原理和大规模表结构变更最佳实践 立即下载
Phoenix 全局索引原理与实践 立即下载