2012-08-16 162 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

相關問題