Apache POI هي واجهة برمجة تطبيقات مجانية ومفتوحة المصدر Java API مكتوبة في Java. يوفر Apache POI وظيفة برامج Java لقراءة وكتابة محفوظات Microsoft Office Format.
صفحة تنزيل المشروع: http://poi.apache.org/download.html
Apache POI هي واجهة برمجة تطبيقات Java التي تقوم بإنشاء وتحافظ على مختلف واجهات برمجة تطبيقات Java التي تتوافق مع Office Open Open XML (OOXML) وتنسيق مستند Microsoft OLE 2 (OLE2). يمكن استخدامه لقراءة وإنشاء وتعديل ملفات MS Excel باستخدام Java. علاوة على ذلك ، يمكنك أيضًا استخدام Java لقراءة وإنشاء ملفات MS Word و MspowerPoint. يوفر Apache POI حل Java Excel Solution.
مثال على قراءة وثيقة Excel
نستخدم HSSFWorkBook في POI لقراءة بيانات Excel.
اختبار الفراغ العام (ملف الملف) يلقي ioException {inputStream inp = new FileInputStream (file) ؛ HSSFWorkbook Workbook = جديد HSSFWorkbook (INP) ؛ // مصنف ... عملية اجتياز} يوضح الرمز أعلاه أنه من المقبول قراءة ملف Excel2003 (XLS) ، ولكن بمجرد قراءة ملف Excel2007 (XLSX) ، سيتم الإبلاغ عن استثناء: "يبدو أن البيانات الموردة في Office 2007+ XML.
بعد مراجعة المعلومات ، يجب قراءة إصدار Excel 2007 من ملفات Excel باستخدام XSSFWorkBook ، على النحو التالي:
اختبار الفراغ العام (ملف الملف) يلقي ioException {inputStream inp = new FileInputStream (file) ؛ XSSFWorkbook Workbook = XSSFWorkbook جديد (INP) ؛ // مصنف ... عملية اجتياز} ملاحظة: يتطلب XSSFWorkbook استيراد إضافي لـ PO-OOXML-3.9-Sources.JAR و POI-OOXML-SCHEMAS-3.9.JAR.
وبهذه الطريقة ، لا توجد مشكلة في استيراد Excel2007 ، ولكن تم الإبلاغ عن استثناء لاستيراد Excel2003.
لذلك ، عند استيراد Excel ، حاول الحكم على إصدار Excel واستدعاء طرق مختلفة.
لقد فكرت في استخدام اسم لاحقة الملف لتحديد النوع ، ولكن إذا قام شخص ما بتغيير لاحقة XLSX إلى XLS ، إذا كان يستخدم وظيفة XLSX للقراءة ، فإن النتيجة هي خطأ ؛ على الرغم من أن اسم اللاحقة صحيح ، إلا أن محتوى الملف الذي يشفر وما إلى ذلك غير صحيح.
أخيرًا ، يوصى باستخدام WorkbookFactory.Create (inputStream) في POI-OOXML لإنشاء مصنف ، لأن كلا من HSSFWORK و XSSFWORK PROFEST. الرمز كما يلي:
Workbook wb = WorkbookFactory.create (IS) ؛
كما يمكنك أن تتخيل ، في وظيفة workbookfactory.create () ، يجب أن يكون هناك حكم على نوع الملف. دعونا نلقي نظرة على كيفية قضاة رمز المصدر:
/ ** * ينشئ HSSFWorkbook / XSSFWORKBOOK المناسبة من * إدخال inputstream المعطى. * يجب أن يدعم دفق الإدخال الخاص بك علامة/إعادة تعيين ، أو * يتم لفه كـ {link pushbackInputStream}! */ كتاب عام ثابت عام إنشاء (inputStream INP) يلقي ioException ، invalidformatexception {// إذا لم يكن بوضوح يقوم بالعلامة/ إعادة تعيين ، اختتام إذا (! inp.marksupported ()) {inp = new paphbackInputStream (inp ، 8) ؛ } if (poifsfilesystem.haspoifsheader (inp)) {return new hssfworkbook (inp) ؛ } if (poixmldocument.hasooxmlheader (inp)) {return new xssfworkbook (opcpackage.open (inp)) ؛ } رمي جديد غير unalfalargumentException ("لم يكن InputStream دفق OLE2 ، ولا دفق OOXML") ؛ }يمكنك أن ترى أنه يتم إنشاء كائنات المصنف المناسبة بشكل منفصل وفقًا لنوع الملف. يتم الحكم عليه بناءً على معلومات الرأس الخاصة بالملف. في هذا الوقت ، حتى لو تم تغيير اسم لاحقة ، لا يزال لا يمكن تمريره.