我可以通过云端硬盘API上传和转换CSV文件,没有任何问题,但是当发送XLS(使用PEAR XLS-Writer渲染)或XLSX(使用PHPExcel渲染)时,Drive API会抱怨:
"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时,它是一样的......加载预览时,当转换=true时,它会卡住。
使用 MS Excel 创建文件并手动上传文件时,它工作正常。
我可以插入/更新,下载/打开文件(一切正常) - 但我想转换它们。
执行所有测试后,我想问题与创建的文件格式或MIME类型有关。
转换可能失败的任何提示...
"有没有人设法转换渲染的XLS/XLSX?"
问题基本上是:为了转换为gSheet,预期的文件格式+ MIME类型是什么?
我会接受赏金的任何答案,它提供了一种将多维数组转换为具有多个页面的 gSheet 的方法,以防(尚)无法通过驱动器 API 实现(当然这将是首选方式)。
这是一个 Google 云端硬盘 API 问题 - 只是没有可用的单个标签。
最快进的是将数组呈现到 Excel 2007,只需在桌面上安装 Google Drive 应用程序即可访问数据。电子表格 API 无法创建文档,需要使用文档 API 执行此操作;目前,PHP 的 API 包装器不支持这两个端点 - 像这样我也可以修改文件。及时努力:1小时。
更新:当我使用 Excel2007 渲染 XLSX 时,转换失败。当我使用 MS-Excel 和"另存为"打开同一个文件时 - 我甚至可以通过驱动器 API 转换它。
我在解压缩文件并进行比较时注意到了一些事情:
a) MS-Excel 使用值"0/1"而不是"false/true"
b) 目录"xl/worksheets/_rels"被删除(也许没用?
c) XML的行尾从UNIX转换为DOS。
d) MS-Excel将所有空单元格添加到XML中 - PHPExcel没有写出来。
e) 关系 ID 似乎被移动了...代码中有一些+3计算??
问题是,生成的文件格式与驱动器 API 的 XML 解析器不匹配。
我仍然不确定生成的文件格式有什么问题,但是使用MS-Excel本机创建的XML文件修补渲染的XLSX文件可以使其工作:
/* 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文件从修补,其他一些文件会破坏。
您可以使用该应用程序或Google云端硬盘的SDK将Excel文档上传到Google云端硬盘,但我认为Google尚未提供任何转换文件的方法。
可能值得建议将文件转换为Google的团队?我个人从未见过需要它,因为 Excel 工作得很好。
在最后一部分 re 替代方法,您可以简单地使用电子表格 API 直接写入电子表格 https://developers.google.com/google-apps/spreadsheets/。这可能会给您带来增量更新的有益副作用。
例如。
- https://developers.google.com/google-apps/spreadsheets/#creating_a_spreadsheet
- https://developers.google.com/google-apps/spreadsheets/#adding_a_worksheet
- https://developers.google.com/google-apps/spreadsheets/#adding_a_list_row