通过 Google Drive API 从本地 CSV 文件创建 Google Drive 电子表格

Posted

技术标签:

【中文标题】通过 Google Drive API 从本地 CSV 文件创建 Google Drive 电子表格【英文标题】:Create a Google Drive Spreadsheet from a local CSV file via the Google Drive API 【发布时间】:2012-12-16 10:21:35 【问题描述】:

我正在尝试将本地 CSV 文件上传到 Google Drive,并在那里像 Google 电子表格一样显示它。但是,当我转到我的 Google 云端硬盘并单击我的文件的链接时,我只能下载它,而不能以电子表格的形式查看它。我试过使用?convert=true,但文件没有被转换。我也尝试使用 application/vnd.google-apps.spreadsheet 作为 mime 类型,但注意到更改,否则我收到 400 Bad request 响应。

当我右键单击该文件时,我可以选择使用 Google 电子表格打开,然后正确显示该文件。我在 Google 的当前文档中找不到任何关于此的内容,而且在 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 Drive 的 API,但没有发现任何有用的东西。我想知道我是应该使用 Google 电子表格 API 还是单独使用 Google Drive API?

提前非常感谢, 瓦尔德玛

【问题讨论】:

这属于 webapps.stackexchange.com 【参考方案1】:

试试下面的。它来自 Google 文档中的 File:insert 参考,但我添加了转换参数:

/**
 * 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();
  

【讨论】:

那个方法不存在,Fatal error: Call to undefined method Google_DriveFile::setConvert() 我的错,应该仔细看看。立即尝试。 @JayLee 现在插入 == 创建,是否删除了转换选项?我收到未知参数“转换”?【参考方案2】:

我正在尝试上面的代码,它对我不起作用 它会在登录后停止

只需使用 $file->setMimeType('application/vnd.google-apps.spreadsheet);

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

对我有用

【讨论】:

【参考方案3】:

我必须添加另一个参数才能使其工作。 'uploadType' => '多部分'

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

现在它正在工作。

【讨论】:

以上是关于通过 Google Drive API 从本地 CSV 文件创建 Google Drive 电子表格的主要内容,如果未能解决你的问题,请参考以下文章

无法从Google Drive API检索文件内容

通过Google Drive REST API上传或创建包含内容的新文件?

从 google drive api 获取图像 URL 而不是内容

如何从 Google Drive 上传和下载文件(使用 Rest Api v3)

使用服务帐户的Google Drive API问题

为什么Google文档在使用Google Drive API时显示的尺寸为零?