10

私の希望するプログラムの流れは次のとおりです。

  1. ドライブに xlsx スプレッドシートをアップロードします (これは pandas を使用して作成されましたto_excel)
  2. Google スプレッドシート形式に変換する
  3. リンクを知っている人なら誰でも編集できることを指定する
  4. リンクを取得し、情報を入力する担当者と共有します
  5. 完成したシートをダウンロードする

現在、手順 1 と 5 を解決する PyDrive を使用していますが、未解決の問題がいくつかあります。

Google シート形式に変換するにはどうすればよいですか? 'application/vnd.google-apps.spreadsheet'PyDrive でアップロードするファイルを作成したときと同じように mimeType を指定しようとしましたが、エラーが発生しました。

リンクを知っている人なら誰でもファイルを編集できるようにするにはどうすればよいですか? それが設定されると、PyDrive を使用して簡単に共有リンクを取得できます。

更新: xlsx から Google シートへの変換は、convert=Trueフラグを使用して簡単に行うことができます。下記参照。新しいファイルの共有設定を「リンクを知っている人なら誰でも編集できる」に設定する方法をまだ探しています。

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})
4

2 に答える 2

3

リンクを知っている全員がファイルを編集できるように設定するには、次の情報を使用して新しい権限を挿入する必要があります。

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"]

于 2015-04-30T18:40:03.523 に答える
3

「INSERT」メソッドと「COPY」メソッドの両方に、「convert」というオプションのクエリ パラメータがあります。

convert=true,

このファイルを対応する Google ドキュメント形式に変換するかどうか。(デフォルト: false)

ここにPythonの例があります:

Google ドキュメント - コピー

コードを機能させるには、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

私はこれを試していないので、テストする必要があります。

于 2015-02-27T03:09:58.633 に答える