Google Drive API v3将Google电子表格下载为Excel

时间:2017-05-16 21:43:10

标签: python google-drive-api google-api-python-client

我尝试将Google云端硬盘电子表格下载为Excel文件。据我所知,Google Drive API应该通过为export_media请求指定不同的mime类型来实现这一点。

根据教程脚本,我可以成功将电子表格下载为CVS和Open Office表格。太好了!

但是,如果将mime类型设置为application/vnd.openxmlformats-officedocument.spreadsheetml.sheet - 正如为MS Excel指定的那样,下载程序将继续从流中读取而不会停止并且不会增加状态进度。

完整脚本为here。要运行,请按照说明在Google Drive API文档here

中创建应用

违规代码在这里:

    file_id = 'my spreadsheet id'

    request = service.files().export_media(fileId=file_id, mimeType='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')

    fh = FileIO('data.xls', 'wb')
    downloader = MediaIoBaseDownload(fh, request)
    done = False
    while done is False:
        status, done = downloader.next_chunk()
        print("Download %d%%." % int(status.progress() * 100))

继续打印Download 0%并永不停止。

1 个答案:

答案 0 :(得分:0)

事实证明,%(Filename)依赖于'内容范围MediaBaseIODownload内容长度`来了解何时停止。

or

但是,在我可以看到的调试器中,它们不在响应中。因此,它不知道什么时候完成。

  if 'content-range' in resp:
    content_range = resp['content-range']
    length = content_range.rsplit('/', 1)[1]
    self._total_size = int(length)
  elif 'content-length' in resp:
    self._total_size = int(resp['content-length'])

解决方案是不进行部分下载,而是完全下载:

  if self._progress == self._total_size:
    self._done = True