2012-08-16 11 views
8

मैं अपलोड कर सकते हैं और किसी भी समस्या के बिना डिस्क API द्वारा CSV फ़ाइलों में कनवर्ट, लेकिन जब XLS भेजने (नाशपाती XLS-लेखक साथ गाया) या XLSX (PHPExcel साथ गाया) डिस्क API शिकायत:एक्सेल फ़ाइल-प्रारूप को ड्राइव एपीआई अपलोड द्वारा जी-शीट में कैसे परिवर्तित करें?

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

MIME प्रकार "एप्लिकेशन/vnd.ms-excel" स्पष्ट रूप से "एप्लिकेशन/vnd-excel" से बेहतर काम करता है

जब मैं सामग्री-प्रकार "एप्लिकेशन/vnd.openxmlformats-officedocument.spreadsheetml.sheet" के साथ XLSX लिखता हूं तो यह वही है ... पूर्वावलोकन को लोड करते समय यह अटक जाता है, जब कनवर्ट = सत्य।

एमएस एक्सेल के साथ फाइलें बनाते समय और मैन्युअल रूप से अपलोड करते समय यह ठीक काम करता है।

मैं फ़ाइलों को सम्मिलित/अपडेट, डाउनलोड/खोल सकता हूं (सभी ठीक) - लेकिन मैं उन्हें परिवर्तित करना चाहता हूं।

सभी परीक्षणों के साथ मुझे लगता है कि समस्या बनाई गई फ़ाइल-प्रारूप - या एमआईएमई प्रकार से संबंधित है।

कोई संकेत क्यों रूपांतरण असफल हो सकता है ...

"कभी क्या किसी को प्रदान की गई XLS/XLSX परिवर्तित करने में कामयाब रहे?"

मूल रूप से सवाल यह है: gSheet में कनवर्ट करने के लिए अपेक्षित फ़ाइल प्रारूप + MIME-type क्या है?

मैं इनाम है, जो एक तरह से कई पृष्ठ gSheet लिए एक बहु-आयामी सरणी परिवर्तित करने के लिए प्रदान करता है के लिए किसी भी सवाल का जवाब स्वीकार करना चाहते हैं, के मामले में यह (अभी तक) डिस्क API के माध्यम संभव नहीं है (पक्का है कि हो सकता है पसंदीदा तरीका)।

यह Google ड्राइव एपीआई प्रश्न है - इस उपलब्ध के लिए कोई व्यक्तिगत टैग नहीं है।

+0

कुछ स्पष्टीकरण: - 1. क्या आप कह रहे हैं कि बिल्कुल उसी फ़ाइल को वेब इंटरफ़ेस के माध्यम से अपलोड/परिवर्तित किया जा सकता है, लेकिन एपीआई के माध्यम से 50 विफल हो जाता है? यदि ऐसा है, तो जांचें कि आपका बेस 64 एन्कोडिंग सही है। 2. आप बिना रूपांतरण के अपलोड कर सकते हैं। यदि आप वेब इंटरफ़ेस में "Google डॉक्स में कनवर्ट" करने का प्रयास करते हैं तो क्या होता है? – pinoyyid

+0

यदि मैं रूपांतरण के साथ वेब ब्राउज़र द्वारा अपलोड करता हूं - यह काम करता है, एपीआई पर सहेजी गई फ़ाइलों को कनवर्ट करना कनवर्ट नहीं करेगा (प्रोग्रेस-बार फंस जाता है); मैं PHP के लिए google-api wrapper का उपयोग कर रहा हूँ। –

उत्तर

1

सबसे तेजी से आगे Excel 2007 के लिए सरणी प्रस्तुत करना और सिर्फ डेटा तक पहुँचने के लिए डेस्कटॉप पर Google डिस्क एप्लिकेशन इंस्टॉल किया गया था। स्प्रेडशीट्स एपीआई दस्तावेज नहीं बना सकता है, डॉक्स एपीआई के साथ ऐसा करने की ज़रूरत है; वर्तमान में PHP के लिए एपीआई रैपर इन दोनों एंडपॉइंट्स का समर्थन नहीं करता है - इस तरह मैं फ़ाइलों को भी संशोधित कर सकता हूं। समय पर प्रयास: 1 एच।

अद्यतन: जब मैं Excel2007 के साथ XLSX प्रस्तुत करता हूं तो रूपांतरण विफल हो जाता है।जब मैं एमएस-एक्सेल और "सेव एज़" के साथ एक ही फाइल खोलता हूं - मैं इसे ड्राइव एपीआई पर भी परिवर्तित कर सकता हूं।

मैं कुछ चीजें जब फ़ाइलें अनज़िप करने और तुलना देखा:

क) एमएस-एक्सेल का उपयोग करता मूल्यों '0/1' के स्थान पर 'गलत/सच'

ख) निर्देशिका 'एक्स्ट्रा लार्ज/कार्यपत्रकों/_rels 'हटा दिया गया है (शायद बेकार?)।

सी) एक्सएमएल के लाइन-एंडिंग को यूनिक्स से डॉस में परिवर्तित कर दिया गया था।

डी) एमएस-एक्सेल ने एक्सएमएल में सभी रिक्त कक्ष जोड़े - जो PHPExcel नहीं लिखा था।

ई) संबंध आईडी को स्थानांतरित किया जाना प्रतीत होता है ... कोड में कुछ +3 गणना ??

समस्या यह है कि जेनरेट की गई फ़ाइल-प्रारूप ड्राइव एपीआई के एक्सएमएल-पार्सर से मेल नहीं खा रहा है।

/* 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(); 
} 

सेल:

मैं अभी भी बिल्कुल यकीन है कि क्या जनरेट की गई फ़ाइल प्रारूप, के साथ गलत लेकिन पैचिंग गाया XLSX देशी रूप MS-एक्सेल द्वारा बनाई XML फ़ाइलों के साथ फाइल यह काम करता है नहीं कर रहा हूँ स्वरूपण बहुत उचित नहीं है - लेकिन रूपांतरण & पूर्वावलोकन काम कर रहा है।

कुछ एक्सएमएल फ़ाइलों को पैचिंग से भी छोड़ सकते हैं, कुछ अन्य इसे तोड़ देते हैं।

+0

हाल ही में मैंने एक सर्वेक्षण में भाग लिया और मैंने जिन मुद्दों का सामना किया उनमें से कुछ को इंगित करने का मौका दिया; उम्मीद है कि वे सिर्फ HTTP500 की तुलना में थोड़ा और बोलने वाली फ़ाइल-सत्यापन त्रुटियां जोड़ देंगे। –

+0

अपडेट: ड्राइव एपीआई के साथ संयोजन में PHPExcel के वास्तविक संस्करण एक्सेल पैकेज को ठीक करने की आवश्यकता के बिना gSheet में कनवर्ट करें (कम से कम मेरे लिए)। खुशी है कि उन्होंने तय किया कि (यह जानने के बिना कि यह कौन था)। –

0

आप ऐप या Google ड्राइव के एसडीके का उपयोग करके अपने एक्सेल दस्तावेज़ों को Google ड्राइव पर अपलोड कर सकते हैं लेकिन मुझे नहीं लगता कि Google अभी तक फ़ाइलों को कन्वर्ट करने का कोई तरीका प्रदान करता है।

Google की टीम में फ़ाइल रूपांतरण का सुझाव देने लायक हो सकता है? मैंने व्यक्तिगत रूप से इसकी आवश्यकता कभी नहीं देखी है क्योंकि एक्सेल ठीक काम करता है।

+0

मेरा इरादा वेब-ब्राउज़र के भीतर बहु-पृष्ठ पूर्वावलोकन प्राप्त करना है ... और सीएसवी केवल एक आयाम का समर्थन करता है। उनका वेब-ऐप इसका समर्थन करता है, लेकिन वास्तव में एपीआई के बारे में निश्चित नहीं है, क्योंकि HTTP500 प्रतिक्रिया कुछ भी हो सकती है। डेस्कटॉप ऐप या एसडीके एक विकल्प नहीं है - वेब वातावरण में केवल ड्राइव एपीआई उपलब्ध है। –

+0

क्या आप सीएसवी को एक्सएलएस/एक्सएलएसएक्स में परिवर्तित नहीं कर सकते हैं और इसे मल्टीपाटेज पूर्वावलोकन प्राप्त करने के लिए Google ड्राइव में अपलोड कर सकते हैं? – Jamesking56

+0

या (एक पूरी तरह से अलग दृष्टिकोण के रूप में) यदि आप बहु पृष्ठ पूर्वावलोकन के बाद हैं तो आप सीएसवी को पीडीएफ में परिवर्तित करने के लिए PHP का उपयोग करने का प्रयास कर सकते हैं ... – Jamesking56

0

अंतिम भाग फिर से वैकल्पिक दृष्टिकोण पर, आप स्प्रेडशीट एपीआई का उपयोग सीधे स्प्रेडशीट https://developers.google.com/google-apps/spreadsheets/ में लिखने के लिए कर सकते हैं। यह आपको वृद्धिशील अद्यतनों का लाभकारी दुष्प्रभाव दे सकता है।

ईजी।

+0

मैं ड्राइव एपीआई पर भी कई संशोधन कर सकता हूं ... लेकिन यह संभवतः उस बहु-आयामी सरणी को सम्मिलित करने का सबसे कम प्रयास है - प्रत्येक हाइपरलिंक प्रति लूप घोंसला :) - एक बार मेरे पास एक जीशीट है, जिसे निर्यात किया जा सकता है निपुर्ण होना। अगर मैं google-api wrapper पर चादरें/पंक्तियां डाल सकता हूं तो यह जवाब स्वीकार करेगा। मुझे लगता है कि curl स्थापित भी, मुझे लगता है। –

+0

यदि मैं https://developers.google.com/google-apps/documents-list/ दस्तावेज़ सूची API के साथ सम्मिलित और परिवर्तित कर सकता हूं, तो यह पंक्ति-दर-पंक्ति लिखने से अधिक उपयुक्त होगा। आज परीक्षण करेंगे कि क्या सुलभ और काम कर रहा है। –

संबंधित मुद्दे