python + google drive:上传xlsx,转换为google表格,获得可共享的链接

时间:2015-02-27 01:48:08

标签: python google-drive-api google-sheets pydrive

我想要的程序的流程是:

  1. 将xlsx电子表格上传到驱动器(它是使用pandas to_excel创建的)
  2. 将其转换为Google表格格式
  3. 指定任何拥有链接的人都可以编辑
  4. 获取链接并与将输入信息的人分享
  5. 下载完成的表格
  6. 我目前正在使用PyDrive,它解决了第1步和第5步,但还有一些未解决的问题。

    如何转换为Google表格格式?当我创建要使用PyDrive上传的文件时,我尝试将mimeType指定为'application/vnd.google-apps.spreadsheet',但这给了我一个错误。

    如何通过链接将文件设置为可编辑?一旦设置完毕,我就可以轻松地使用PyDrive获得共享链接。

    更新:使用convert=True标记很容易从xlsx转换为Google工作表。见下文。我仍然在寻找一种方法来将我的新文件的共享设置设置为"任何有链接的人都可以编辑"。

    from pydrive.auth import GoogleAuth
    from pydrive.drive import GoogleDrive
    
    gauth = GoogleAuth()
    gauth.LocalWebserverAuth()
    drive = GoogleDrive(gauth)
    
    test_file = drive.CreateFile({'title': 'testfile.xlsx'})
    test_file.SetContentFile('testfile.xlsx')
    test_file.Upload({'convert': True})
    

2 个答案:

答案 0 :(得分:3)

对于" INSERT"有一个" convert"的可选查询参数。和"复制"方法;

convert=true,
  

是否将此文件转换为相应的Google文档格式。 (默认值:false)

这里有一个python示例:

Google Documentation - Copy

您需要使用Python客户端库才能使代码生效。

from apiclient import errors
from apiclient.http import MediaFileUpload
# ...

def insert_file(service, title, description, parent_id, mime_type, filename):
  """Insert new file.

  Args:
    service: Drive API service instance.
    title: Title of the file to insert, including the extension.
    description: Description of the file to insert.
    parent_id: Parent folder's ID.
    mime_type: MIME type of the file to insert.
    filename: Filename of the file to insert.
  Returns:
    Inserted file metadata if successful, None otherwise.
  """
  media_body = MediaFileUpload(filename, mimetype=mime_type, resumable=True)
  body = {
    'title': title,
    'description': description,
    'mimeType': mime_type
  }
  # Set the parent folder.
  if parent_id:
    body['parents'] = [{'id': parent_id}]

  try:
    file = service.files().insert(
        body=body,
        convert=true,
        media_body=media_body).execute()

    # Uncomment the following line to print the File ID
    # print 'File ID: %s' % file['id']

    return file
  except errors.HttpError, error:
    print 'An error occured: %s' % error
    return None

我没试过这个,所以你需要测试它。

答案 1 :(得分:2)

为了将文件设置为可以为具有该链接的任何人编辑,您必须使用以下信息插入新权限:

from apiclient import errors
# ...

def share_with_anyone(service, file_id):
  """Shares the file with anyone with the link

  Args:
    service: Drive API service instance.
    file_id: ID of the file to insert permission for.

  Returns:
    The inserted permission if successful, None otherwise.
  """
  new_permission = {
      'type': "anyone",
      'role': "writer",
      'withLink': True
  }
  try:
    return service.permissions().insert(
        fileId=file_id, body=new_permission).execute()
  except errors.HttpError, error:
    print 'An error occurred: %s' % error
  return None

然后获取您转到的链接:file [" alternateLink"]