4

ローカルのCSVファイルをGoogleドライブにアップロードして、そこでGoogleスプレッドシートのように表示しようとしています。ただし、Googleドライブにアクセスしてファイルへのリンクをクリックすると、ダウンロードのみが可能で、スプレッドシートとして表示することはできません。使ってみました?convert=trueが、ファイルが変換されません。mimeタイプとしても使用してみましapplication/vnd.google-apps.spreadsheetたが、変更点に注意するか、400 Bad request応答があります。

ファイルを右クリックすると、Googleスプレッドシートで開くことを選択できます。これにより、ファイルが正しく表示されます。私はグーグルで現在のドキュメントでこれについて何も見つけることができず、グーグルでの検索はあまり役に立ちませんでした。

これまでに行ったことは、新しい空のGoogleスプレッドシートを作成し、CSVファイルで埋めようとしたことですが、それで500 Internal Error

        $file = new Google_DriveFile();
        $file->setTitle('Exported data from ' . $this->event->title);
        $file->setDescription('Exported data from ' . $this->event->title);
        $file->setMimeType( 'text/csv' );

        try {
            $createdFile = $this->drive->files->insert($file, array(
              'data' => $data,
              'mimeType' => 'application/vnd.google-apps.spreadsheet'
            ), array('convert'=>true));

            // Uncomment the following line to print the File ID
            // print 'File ID: %s' % $createdFile->getId();

         $additionalParams = array(
    'newRevision' => false,
    'data' => $data,
    'convert'=>true //no change if this is true or false
);
            $newFile = $this->drive->files->get( $createdFile->getId() );
            $newFile->setMimeType('text/csv');
            $updated = $this->drive->files->update($createdFile->getId(), $newFile, $additionalParams);

            preint_r($updated);
        } catch (Exception $e) {
            print "An error occurred: " . $e->getMessage();
        }

GoogleドライブのAPIを調べましたが、有用なものは見つかりませんでした。Google Spreadsheets APIを使用する必要があるのか​​、それともGoogle DriveAPIを単独で使用するのか疑問に思っています。

よろしくお願いします、Waldemar

4

3 に答える 3

4

次のことを試してください。これは、GoogleドキュメントのFile:insert参照からのものですが、convertパラメーターを追加しました。

/**
 * Insert new file.
 *
 * @param Google_DriveService $service Drive API service instance.
 * @param string $title Title of the file to insert, including the extension.
 * @param string $description Description of the file to insert.
 * @param string $parentId Parent folder's ID.
 * @param string $mimeType MIME type of the file to insert.
 * @param string $filename Filename of the file to insert.
 * @return Google_DriveFile The file that was inserted. NULL is returned if an API error         occurred.
 */
function insertFile($service, $title, $description, $parentId, $mimeType, $filename) {
  $file = new Google_DriveFile();
  $file->setTitle($title);
  $file->setDescription($description);
  $file->setMimeType($mimeType);

  // Set the parent folder.
  if ($parentId != null) {
    $parent = new ParentReference();
    $parent->setId($parentId);
    $file->setParents(array($parent));
  }

  try {
    $data = file_get_contents($filename);

    $createdFile = $service->files->insert($file, array(
      'data' => $data,
      'mimeType' => $mimeType,
      'convert' => true,
    ));

    // Uncomment the following line to print the File ID
    // print 'File ID: %s' % $createdFile->getId();

    return $createdFile;
  } catch (Exception $e) {
    print "An error occurred: " . $e->getMessage();
  }
}
于 2013-01-02T01:03:05.230 に答える
2

上記のコードを試してみましたが、機能しません。ログイン後に停止します。

$ file-> setMimeType('application / vnd.google-apps.spreadsheet);を使用するだけです。

$createdFile = $service->files->insert($file, array(
  'data' => $data,
  'mimeType' => 'text/csv',
  'convert' => true,
));

それは私のために働くでしょう

于 2015-05-11T18:54:44.543 に答える
1

それを機能させるには、別のパラメーターを追加する必要があります。'uploadType'=>'マルチパート'

$createdFile = $service->files->insert($file,array(
'data' => $data,
'mimeType' => 'text/csv',
'convert' => true,
'uploadType' => 'multipart',
));

今それは働いています。

于 2015-09-18T10:47:54.460 に答える