2012-08-16 161 views
8

我可以上传和驱动API转换CSV文件中没有任何问题, 但发送XLS时(梨XLS-作家渲染)或XLSX(与PHPExcel渲染)驱动器API抱怨:如何通过Drive API上传将Excel文件格式转换为G-Sheet?

"Error calling POST https://www.googleapis.com/upload/drive/v2/files?convert=true&uploadType=multipart&key=123: (500) Internal Error" 

MIME类型“application/vnd.ms-excel”显然比“application/vnd-excel”更好用

当我用内容类型“application/vnd.openxmlformats-officedocument.spreadsheetml.sheet”写出XLSX时,它是完全一样的... 当加载预览时,convert = true时它会卡住。

使用MS Excel创建文件并手动上传时,它可以正常工作。

我可以插入/更新,下载/打开文件(一切正常) - 但我想转换它们。

执行所有测试后,我猜这个问题与创建的文件格式或MIME类型有关。

任何提示,为什么转换可能会失败......

“做过有人设法转换呈现XLS/XLSX?”

问题基本上是:为了转换为gSheet,预期的文件格式+ MIME类型是什么?

我接受任何奖励的答案,它提供了一种方法来将多维数组转换为具有多个页面的gSheet,以防它通过Drive API(尚未)可能(可以肯定的是首选方式)。

这是一个谷歌驱动器API的问题 - 这只是没有单独的标签可用。

+0

一些说明: - 1.您是否说过完全相同的文件可以通过Web界面进行上传/转换,但通过API失败50?如果是这样,请检查您的Base64编码是否正确。 2.您可以上传而无需转换。如果您尝试在网络界面中“转换为Google文档”,会发生什么情况? – pinoyyid 2012-09-05 02:09:46

+0

如果我通过网页浏览器上传转换 - 它的工作原理,转换已保存在API上的文件不会转换(进度条卡住);我正在使用PHP的google-api包装器。 – 2012-09-05 14:51:54

回答

1

最迅速的是渲染阵列,以Excel 2007中,只是在台式机上安装谷歌云端硬盘应用访问数据。 Spreadsheets API无法创建文档,需要使用Docs API来完成;目前PHP的API封装不支持这两个端点 - 就像我可以修改这些文件一样。及时的努力:1小时。

更新:当我使用Excel2007渲染XLSX时,转换失败。当我用MS-Excel和“另存为”打开同一个文件时 - 即使在Drive API上,我也可以将其转换。

我注意到解压文件时,相比一些事情:

一)MS-Excel使用值 '0/1',而不是 '假/真'

二)目录“XL /工作表/ _rels'被删除了(可能没用?)。

c)XML的行尾从UNIX转换到DOS。

d)MS-Excel将所有空白单元格添加到XML-- PHPExcel没有写出。

e)关系ID似乎被移位......在代码中有+3的计算?

问题是生成的文件格式与Drive API的XML解析器不匹配。

我还不能完全确定什么是错的,生成的文件格式, 但修补呈现XLSX与MS-Excel的本地创建的XML文件的文件使得它的工作:

/* how-to patch the generated XLSX: */ 

$zip = new ZipArchive(); 
$zip->open($xlsx_path); 
$zip->extractTo($export_dir.'temp'); 
$zip->close(); 

$this->deleteDir($export_dir.'temp/xl/worksheets/_rels'); 

$files =array(
    '_rels/.rels', 
    'docProps/app.xml', 
    'docProps/core.xml', 
    'xl/workbook.xml', 
    'xl/_rels/workbook.xml.rels', 
    'xl/theme/theme1.xml' 
); 
foreach($files as $file){ 
    copy($export_dir.'template/'.$file, $export_dir.'temp/'.$file); 
} 

unlink($xlsx_path); 

if($zip->open($xlsx_path, ZIPARCHIVE::CREATE)) { 
$source = str_replace('\\', '/', realpath($export_dir.'temp')); 
if(is_dir($source) === true) { 
    $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST); 
    foreach ($files as $file) { 
     $file = str_replace('\\', '/', $file); 
     if(in_array(substr($file, strrpos($file, '/')+1), array('.', '..'))){continue;} 
     $file = realpath($file); 
     if(is_dir($file) === true){$zip->addEmptyDir(str_replace($source . '/', '', $file . '/'));} 
     else if(is_file($file) === true){ 
       $zip->addFromString(str_replace($source . '/', '', $file), file_get_contents($file)); 
      } 
     } 
    } 
    else if(is_file($source) === true) { 
     $zip->addFromString(basename($source), file_get_contents($source)); 
    } 
    $zip->close(); 
} 

细胞格式不太适合 - 但转换&预览正在工作。

甚至可以从修补中跳过一些XML文件,而其他一些XML文件则会使其中断。

+0

最近我参加了一个调查,并利用这个机会指出了我面对的一些问题;希望他们会增加一点说话文件验证错误,而不仅仅是HTTP500。 – 2012-09-28 23:20:06

+0

更新:实际版本的PHPExcel与Drive API结合转换为gSheet,无需修复Excel包(至少对我而言)。很高兴他们解决了这个问题(不知道是谁)。 – 2013-01-25 04:28:46

0

您可以使用应用程序或Google Drive的SDK将您的Excel文档上传到Google云端硬盘,但我认为Google没有提供任何方式来转换文件。

值得向Google团队建议文件转换吗?我从来没有见过需要它,因为Excel工作得很好。

+0

我的意图是在网页浏览器中获得多页面预览...并且CSV仅支持一个维度。他们的网络应用程序支持它,但真的不确定API,因为HTTP500响应可能是任何事情。桌面应用程序或SDK不是一个选项 - 在Web环境中只有Drive API可用。 – 2012-09-04 13:08:48

+0

难道您不能将CSV转换为XLS/XLSX并将其上传到Google Drive以获取多页预览? – Jamesking56 2012-09-04 15:41:04

+0

或者(作为一个完全不同的方法),如果你是在多页面预览之后,你可以尝试使用PHP将CSV转换为PDF ... – Jamesking56 2012-09-04 15:43:36

0
+0

我可以在Drive API上创建多个修订... 但是,这可能是最少插入多维数组 - 每个循环嵌套的每个超链接:) - 一旦我有一个gSheet,可以导出脱颖而出。将接受这个答案,如果我可以在google-api包装器上插入表单/行。我想,也安装了cURL。 – 2012-09-05 14:57:49

+0

如果我可以使用https://developers.google.com/google-apps/documents-list/文档列表API插入和转换,这比逐行写出更合适。将测试今天什么是可以访问和锻炼。 – 2012-09-05 15:17:06

相关问题