PHP

2010-06-03 13 views
5

के साथ बड़ी एक्सेल फ़ाइल पढ़ना मैं PHPExcel1.7.3c के साथ एक 17 एमबी एक्सेल फ़ाइल (2003) पढ़ने की कोशिश कर रहा हूं, लेकिन यह 120 सेकंड सीमा से अधिक होने के बाद फ़ाइल लोड करते समय पहले से ही क्रश करता है। क्या कोई अन्य लाइब्रेरी है जो इसे और अधिक कुशलता से कर सकती है? मुझे स्टाइल में कोई ज़रूरत नहीं है, मुझे केवल यूटीएफ 8 का समर्थन करने की आवश्यकता है। आपकी मदद के लिए धन्यवादPHP

उत्तर

8

PHPExcel का उपयोग करते समय फाइलसाइज एक अच्छा उपाय नहीं है, प्रत्येक वर्कशीट में कक्षों (पंक्तियों के स्तंभ) की संख्या के बारे में कुछ विचार करना अधिक महत्वपूर्ण है।

आप स्टाइल की कोई आवश्यकता नहीं है, तो आप बुला रहे हैं:

$objReader->setReadDataOnly(true); 

फ़ाइल लोड करने से पहले?

आप किसी कार्यपत्रक के भीतर सभी कार्यपत्रक, या केवल कुछ कोशिकाओं का उपयोग करने की जरूरत नहीं है,

$objReader->setLoadSheetsOnly(array(1,2)) 

या

$objReader->setLoadSheetsOnly(1) 

का उपयोग कर या एक readFilter

हैं परिभाषित करने को देखो आप सेल कैशिंग का उपयोग कर रहे हैं? यदि हां, तो क्या तरीका है? वह लोड समय धीमा कर देता है।

1

17 एमबी एक भारी फ़ाइल है।

समय 1 एमबी फ़ाइल पार्स करने में कितनी देर लगती है ताकि आप काम कर सकें कि 17 एमबी फाइल कब तक ले जाएगी। फिर एक विकल्प आपकी 120 दूसरी सीमा बढ़ाने के लिए हो सकता है।

वैकल्पिक रूप से, आप सीएसवी को निर्यात कर सकते हैं, जो कि अधिक कुशल और PHP के fgetcsv के माध्यम से आयात होगा।

1

मैंने सुना है कि Excel Explorer बड़ी फ़ाइलों को पढ़ने में बेहतर है।

+2

वाणिज्यिक उपयोग के लिए $ 500 पर, मुझे आशा है कि यह बेहतर होगा –

+0

मूल्य और गुणवत्ता का कोई संबंध नहीं है। यदि आप इसे अपने स्वयं के वेब एप्लिकेशन के लिए उपयोग करना चाहते हैं तो आपको केवल $ 99 व्यक्तिगत लाइसेंस की आवश्यकता है। – Sjoerd

0

शायद आप सीएसवी में कनवर्ट/निर्यात कर सकते हैं, और अंतर्निहित fgetcsv() का उपयोग कर सकते हैं। इस बात पर निर्भर करता है कि आपको किस प्रकार की कार्यक्षमता की आवश्यकता है।

2

केवल एक चीज है कि आप अपने पढ़ने से जरूरत Excel फ़ाइल डेटा है, तो यहां विशाल Excel फ़ाइलों को पढ़ने के लिए मेरा तरीका है:

मैं अपने सर्वर पर Gnumeric स्थापित करते हैं, यानी साथ Debian/Ubuntu: उपयुक्त-मिल स्थापित Gnumeric

फिर php मेरी एक्सेल फ़ाइल को पढ़ने और यह एक दो dimensionnal डेटा सरणी में स्टोर कर रहे हैं अविश्वसनीय रूप से सरल (आयाम पंक्तियों और कॉलम कर रहे हैं) के लिए कॉल:

system("ssconvert \"$excel_file_name\" \"temp.csv\""); 
$array = array_map("str_getcsv", file("temp.csv")); 

तो मैं क्या कर सकते हैं के साथ मैं चाहता हूँ मेरी सरणी। 10 एमबी बड़ी एक्सएलएस फ़ाइल के लिए इसमें 10 सेकंड से भी कम समय लगता है, उसी समय मुझे अपने पसंदीदा स्प्रेडशीट सॉफ़्टवेयर पर फ़ाइल लोड करने की आवश्यकता होगी!

बहुत बड़ी फ़ाइलों के लिए, आपको fopen() और file_getcsv() फ़ंक्शंस का उपयोग करना चाहिए और फ़ाइल() फ़ंक्शन के साथ पूरी सीएसवी फ़ाइल को स्मृति में संग्रहीत करने से बचने के लिए आपको एक विशाल सरणी में डेटा संग्रहीत किए बिना करना है । यह धीमा हो जाएगा, लेकिन आपके सभी सर्वर की स्मृति नहीं खाएगा!

0

मैं वर्तमान में स्प्रेडशीट-रीडर (https://github.com/nuovo/spreadsheet-reader) जो XLSX, ODS और CSV पढ़ने में काफी तेज है समस्याओं XLS प्रारूप पढ़ने में केवल उल्लेख उपयोग कर रहा हूँ, और है।

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

  • कोई संबंधित समस्या नहीं^_^