Php 如何通过驱动API上传将Excel文件格式转换为G-Sheet?
我可以通过驱动API上传和转换CSV文件,没有任何问题, 但在发送XLS(使用PEAR XLS Writer呈现)或XLSX(使用PHPExcel呈现)时,驱动器API会抱怨:Php 如何通过驱动API上传将Excel文件格式转换为G-Sheet?,php,phpexcel,xlsx,google-drive-api,Php,Phpexcel,Xlsx,Google Drive Api,我可以通过驱动API上传和转换CSV文件,没有任何问题, 但在发送XLS(使用PEAR XLS Writer呈现)或XLSX(使用PHPExcel呈现)时,驱动器API会抱怨: "Error calling POST https://www.googleapis.com/upload/drive/v2/files?convert=true&uploadType=multipart&key=123: (500) Internal Error" MIME类型“application
"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的方法,以防(目前)无法通过驱动API实现(当然这是首选方法)
这是一个Google Drive API问题-没有单独的标签可用。您可以使用应用程序或Google Drive的SDK将Excel文档上载到Google Drive,但我认为Google尚未提供任何转换文件的方法
是否值得向谷歌团队建议文件转换?我个人从未见过需要它,因为Excel工作得很好。在最后一部分,关于替代方法,您可以简单地使用电子表格API直接写入电子表格。这可能会给您带来增量更新的有益副作用 例如
/* 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文件,另一些则使其中断。我的目的是在web浏览器中获得多页预览。。。CSV只支持一个维度。他们的web应用程序支持它,但确实不确定API,因为HTTP500响应可能是任何东西。桌面应用程序或SDK不是一个选项-在web环境中只有驱动器API可用。您不能将CSV转换为XLS/XLSX并将其上载到Google Drive以获得多页预览吗?或者(作为一种完全不同的方法)如果您正在进行多页预览,您可以尝试使用PHP将CSV转换为PDF…我不想要PDF,事实证明,CSV是不够的。一些澄清:-1。你是说完全相同的文件可以通过web界面上传/转换,但是通过API失败了?如果是,请检查Base64编码是否正确。2.你可以上传而不需要转换。如果您尝试在web界面中“转换为google文档”,会发生什么情况?如果我通过web浏览器上传并进行转换,则转换通过API保存的文件不会转换(进度条卡住);我正在使用PHP的谷歌api包装器。我还可以在驱动api上创建多个版本。。。但这可能是插入多维数组(每个循环嵌套的每个超链接:)所需的最小努力,一旦我有了一个可以导出到Excel的gSheet。如果我能在GoogleAPI包装上插入表格/行,我将接受这个答案。我想也安装了cURL。如果我能用文档列表API插入和转换,这将比逐行写出更合适。今天我将测试什么是可访问的,什么是可行的。最近我参加了一项调查,并借此机会指出了我面临的一些问题;希望他们会添加更多的文件验证错误,而不仅仅是HTTP500。更新:PHPExcel的实际版本与驱动器API结合,转换为gSheet,而不需要修复Excel包(至少对我来说)。很高兴他们(不知道是谁)修好了。