Как конвертировать формат файла Excel в G-Sheet с помощью загрузки API диска?
Я могу загружать и конвертировать CSV-файлы с помощью Drive API без каких-либо проблем, но при отправке 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 / vnd.ms-excel", по-видимому, работает лучше, чем"application/vnd-excel"
когда я пишу XLSX с типом контента " application / vnd.openxmlformats-officedocument.spreadsheetml.- это одно и то же ... он застревает при загрузке предварительного просмотра, когда convert=true.
при создании файлов с MS Excel и загрузка их вручную он работает нормально.
Я могу вставлять/обновлять, загружать / открывать файлы (все в порядке) - но я хочу их конвертировать.
со всеми выполненными тестами я предполагаю, что проблема связана с созданным форматом файла или типом MIME.
любые подсказки, почему преобразование может завершиться неудачей...
" когда-нибудь кому-то удавалось конвертировать визуализированные XLS/XLSX?"
в вопрос в основном: каков ожидаемый формат файла + MIME-тип для преобразования в gSheet?
Я бы принял любой ответ за щедрость, который обеспечивает способ преобразования многомерного массива в gSheet с несколькими страницами, в случае, если это (пока) невозможно через API диска (наверняка, это был бы предпочтительный способ).
Это Google Drive API вопрос - для этого нет отдельного тега.
3 ответов
наиболее быстрой перемоткой была визуализация массива в Excel 2007 и просто установка приложения Google Drive на рабочие столы для доступа к данным. API электронных таблиц не может создавать документы, это необходимо сделать с помощью API Docs; в настоящее время оболочка API для PHP не поддерживает обе эти конечные точки - например, я могу также пересмотреть файлы. Своевременное усилие: 1h.
Update: при рендеринге XLSX с Excel2007 преобразование завершается неудачно. Когда я открываю тот же файл с MS-Excel и "сохранить как" - я могу преобразуйте его даже через API диска.
Я заметил некоторые вещи при распаковке файлов и сравнил:
a) MS-Excel использует значения " 0/1 "вместо" false / true"
b) каталог "xl / worksheets / _rels" удален (может быть, бесполезен?).
c) окончания строк XMLs были преобразованы из UNIX в DOS.
d) MS-Excel добавил все пустые ячейки в XML, которые PHPExcel не записал.
e) идентификаторы отношений быть смещенным ... там какой-то +3 расчет в коде??
проблема в том, что сгенерированный формат файла не соответствует XML-синтаксическому анализатору API диска.
Я все еще не совсем уверен, что не так с сгенерированным форматом файла, но исправление визуализированного XLSX-файла с XML-файлами, созданными MS-Excel, заставляет его работать:
/* 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-файлы от латать, некоторые другие делают его сломать.
вы можете загрузить свои документы Excel на Google Диск с помощью приложения или SDK Google Диска, но я не думаю, что Google предоставляет какой-либо способ конвертировать файлы еще.
может быть, стоит предложить преобразование файлов в команду Google? Я никогда не видел необходимости в этом лично, как Excel работает нормально.
в последней части альтернативных подходов вы можете просто использовать API электронной таблицы для записи непосредственно в электронную таблицу https://developers.google.com/google-apps/spreadsheets/. Это может дать вам полезный побочный эффект инкрементных обновлений.
например.