जावा में एक्सेल शीट पढ़ने के लिए बेहतर एपीआई क्या है - JXL या Apache POI [बंद]


94

एक्सेल शीट को पढ़ने / लिखने / संपादित करने के लिए 2 एपीआई में से कौन सा सरल है? क्या ये API CSV एक्सटेंशन का समर्थन नहीं करते हैं?

File.xls और file.xlsx के लिए JXL का उपयोग करने पर मुझे एक अपवाद मिलता है जैसे:

jxl.read.biff.BiffException: Unable to recognize OLE stream
    at jxl.read.biff.CompoundFile.<init>(CompoundFile.java:116)
    at jxl.read.biff.File.<init>(File.java:127)
    at jxl.Workbook.getWorkbook(Workbook.java:268)
    at core.ReadXLSheet.contentReading(ReadXLSheet.java:46)
    at core.ReadXLSheet.init(ReadXLSheet.java:22)
    at core.ReadXLSheet.main(ReadXLSheet.java:72)

दोनों .xls और .xlsx एक्सटेंशन के लिए। जावा संस्करण मैं उपयोग कर रहा हूं: JDK1.6


1
के बारे में क्या: "जावा में Microsoft Excel स्प्रेडशीट (JXL, Apache POI, आदि) पढ़ने / लिखने के लिए कौन से API हैं? उनमें से प्रत्येक का उपयोग करने के लिए सबसे अच्छा परिदृश्य क्या हैं?"
क्लेशियो मेंडेस

जवाबों:


258

मैंने JXL (अब "JExcel") और अपाचे POI दोनों का उपयोग किया है । पहले मैंने JXL का इस्तेमाल किया था, लेकिन अब मैं Apache POI का उपयोग करता हूं।

सबसे पहले, यहां ऐसी चीजें हैं जहां दोनों एपीआई की समान कार्यक्षमता है:

  • दोनों स्वतंत्र हैं
  • सेल स्टाइल: संरेखण, पृष्ठभूमि (रंग और पैटर्न), बॉर्डर (प्रकार और रंग), फ़ॉन्ट समर्थन (फ़ॉन्ट नाम, रंग, आकार, बोल्ड, इटैलिक, स्ट्राइक, अंडरलाइन)
  • सूत्र
  • हाइपरलिंक
  • सेल क्षेत्रों में विलय
  • पंक्तियों और स्तंभों का आकार
  • डेटा स्वरूपण: संख्या और दिनांक
  • कक्षों के भीतर पाठ रैपिंग
  • फलकों को फ़्रीज़ करें
  • हैडर / पाद समर्थन
  • मौजूदा और नए स्प्रेडशीट पढ़ें / लिखें
  • दोनों मौजूदा स्प्रेडशीट में मौजूदा वस्तुओं को रखने का प्रयास करते हैं जो वे संभव के रूप में बरकरार रहते हैं।

हालाँकि, कई अंतर हैं:

  • शायद सबसे महत्वपूर्ण अंतर यह है कि जावा जेएक्सएल एक्सेल 2007+ ".xlsx" प्रारूप का समर्थन नहीं करता है; यह केवल पुराने BIFF (बाइनरी) ".xls" प्रारूप का समर्थन करता है। Apache POI एक सामान्य डिज़ाइन के साथ दोनों का समर्थन करता है।
  • इसके अतिरिक्त, JXL API का जावा भाग अंतिम बार 2009 में अपडेट किया गया था (3 साल, 4 महीने पहले जैसा कि मैं यह लिखता हूं), हालांकि ऐसा लगता है कि सी # एपीआई है। अपाचे POI सक्रिय रूप से बनाए रखा है।
  • जेएक्सएल सशर्त स्वरूपण का समर्थन नहीं करता है, अपाचे पीओआई करता है, हालांकि यह महत्वपूर्ण नहीं है, क्योंकि आप सशर्त रूप से अपने कोड के साथ कोशिकाओं को प्रारूपित कर सकते हैं।
  • JXL रिच टेक्स्ट फ़ॉर्मेटिंग का समर्थन नहीं करता है , यानी टेक्स्ट स्ट्रिंग के भीतर अलग फॉर्मेटिंग; Apache POI इसका समर्थन करता है।
  • JXL केवल कुछ पाठ घुमावों का समर्थन करता है: क्षैतिज / ऊर्ध्वाधर, +/- 45 डिग्री, और स्टैक्ड; अपाचे POI किसी भी पूर्णांक संख्या के साथ-साथ स्टैक्ड प्लस का समर्थन करता है।
  • जेएक्सएल ड्राइंग आकृतियों का समर्थन नहीं करता है; अपाचे POI करता है।
  • JXL लैंडस्केप / पोर्ट्रेट, मार्जिन्स, पेपर साइज और जूम जैसी ज्यादातर पेज सेटअप सेटिंग्स को सपोर्ट करता है। Apache POI उस सभी रिपीटिंग रो और कॉलम का समर्थन करता है।
  • JXL स्प्लिट पैन का समर्थन नहीं करता है; अपाचे POI करता है।
  • JXL चार्ट निर्माण या हेरफेर का समर्थन नहीं करता है; वह समर्थन अपाचे POI में अभी तक नहीं है, लेकिन एक एपीआई धीरे-धीरे बनना शुरू हो रहा है।
  • Apache POI में JXL की तुलना में अधिक व्यापक दस्तावेज़ और उदाहरण उपलब्ध हैं।

इसके अतिरिक्त, POI में न केवल मुख्य "usermodel" API शामिल है, बल्कि एक इवेंट-आधारित API भी है यदि आप जो करना चाहते हैं, वह स्प्रेडशीट सामग्री को पढ़ना है।

अंत में, बेहतर प्रलेखन, अधिक सुविधाओं, सक्रिय विकास और Excel 2007+ प्रारूप समर्थन के कारण, मैं Apache POI का उपयोग करता हूं।


विस्तृत विवरण के लिए धन्यवाद।
स्वगतिका

8
+1 स्पष्ट, संक्षिप्त और अत्यंत मददगार
रॉन

1
getContents()JExcelAPI में गंदी विधि मुझे बहुत समय बचाती है। POI के साथ, आपको इसे सेल प्रकार की जांच करनी चाहिए, फिर इसे प्राप्त करें (यदि यह संख्यात्मक सेल है, तो आपको यह जांचना होगा कि क्या यह एक प्रकार का सेल है), यह टाइप करने के अनुसार है, और अंत में इसे अलग-अलग तरीकों से स्ट्रिंग मान में बदल दें, यह बहुत असुविधाजनक है। कल्पना नहीं कर सकते कि POI ऐसा गंदा लेकिन सुविधाजनक तरीका प्रदान नहीं करता जैसा कि JExcelAPI करता है।
लियूयान

1
एक बहुत ही सकारात्मक बात अगर POI इवेंट-आधारित रीडिंग है। विशेष रूप से मोबाइल उपकरणों (= एंड्रॉइड) पर, यह सीमित हीप आकारों और जीसी से निपटने में बहुत मदद करता है। JXL के साथ एक साधारण XLS पढ़ना अक्सर ऐप मेमोरी सीमा तक पहुंच जाता है, जिससे ऐप क्रैश हो जाता है।
जिल्द की सूजन

2
एक महत्वपूर्ण कारक जिसने मुझे POI में स्थानांतरित करने के लिए बनाया है वह है स्टीमिंग एपीआई का उपयोग करने का लचीलापन जो कि जब आप डेटा की बड़ी मात्रा के साथ एक्सेल पढ़ना चाहते हैं तो यह एक जरूरी है। यदि आप एक्सेल खोलते हैं, तो आप नहीं चाहेंगे कि एक्सल खोलने पर मेमोरी में डेटा लोड हो। स्ट्रीमिंग के साथ, आपके एक्सेल / किसी भी कार्यालय दस्तावेज़ की पूरी सामग्री को शीट को पार्स करने के तुरंत बाद मेमोरी में लोड नहीं किया जाएगा।
अशोक कोइ

12

मैंने POI का उपयोग किया है।

यदि आप इसका उपयोग करते हैं, तो उन सेल फॉर्मेटर्स पर नज़र रखें: एक बनाएँ और सेल के लिए हर बार बनाने के बजाय इसका कई बार उपयोग करें, यह एक बड़ा मेमोरी खपत अंतर या बड़ा डेटा है।


5

मैं JXL से परिचित नहीं हूं और हम POI का उपयोग करते हैं। POI अच्छी तरह से बनाए रखा है और दोनों बाइनरी .xls प्रारूप और नए xml आधारित प्रारूप को संभाल सकता है जिसे Office 2007 में पेश किया गया था।

CSV फाइलें एक्सेल फाइलें नहीं हैं, वे पाठ आधारित फाइलें हैं, इसलिए ये लाइब्रेरी उन्हें नहीं पढ़ती हैं। आपको स्वयं एक CSV फ़ाइल को पार्स करने की आवश्यकता होगी। मैं किसी भी CSV फ़ाइल लाइब्रेरी के बारे में नहीं जानता, लेकिन मैंने या तो नहीं देखा है।


1

जावा में "सादे" CSV फ़ाइलों को पढ़ने के लिए, OpenCSV नामक एक पुस्तकालय है, जो यहां उपलब्ध है: http://opencsv.sourceforge.net/


3
अपाचे में अब CSV के लिए भी कॉमन्स की पेशकश है, commons.apache.org/proper/commons-csv । यह बहुत अच्छा काम करता है, और इसका अच्छा नाम ब्रांड है।
ट्रिगमेंडर्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.