يمكن استخدام مشروع POI الخاص بـ Apache لمعالجة مستندات MS Office ، وهناك أيضًا إصدار .NET منه على CodePlex. يمكن لمشاريع POI إنشاء والحفاظ على مختلف واجهات برمجة التطبيقات Java استنادًا إلى تنسيقات ملف OOXML و OLE2. معظم مكاتب MS بتنسيق OLE2. يدعم POI Outlook من خلال مشروع HSMF الفرعي ، ويدعم Visio من خلال مشروع HDGF الفرعي ، ويدعم الناشر من خلال HPBF الفرعية.
مثال بسيط على استخدام POI لاستخراج الكلمة:
نحن بحاجة إلى تقديم الحزمتين: PO-3.7.JAT و POI-SCRATCHPAD-3.7.AJR.
نسخة الكود كما يلي:
حزمة msoffice ؛
استيراد java.io.file ؛
استيراد java.io.fileInputStream ؛
استيراد java.io.ioException ؛
استيراد java.io.inputstream ؛
استيراد org.apache.poi.hwpf.hwpfdocument ؛
استيراد org.apache.poi.hwpf.extractor.wordextractor ؛
استيراد org.apache.poi.hwpf.usermodel.characterrun ؛
استيراد org.apache.poi.hwpf.usermodel.peragraph ؛
استيراد org.apache.poi.hwpf.usermodel.range ؛
استيراد org.apache.poi.hwpf.usermodel.section ؛
كلمة الطبقة العامة {
// استخراج جميع المحتوى مباشرة
السلسلة الثابتة العامة readDoc1 (inputStream) رمي ioException {
WordExtractor extractor = new WordExtractor (IS) ؛
إرجاع extractor.getText () ؛
}
// استخراج بقسم القسم ، فقرة الفقرة ، سلسلة characterrun
الفراغ الثابت العام readDoc2 (inputStream) يلقي ioexception {
hwpfdocument doc = new hwpfdocument (IS) ؛
المدى r = doc.getRange () ؛
لـ (int x = 0 ؛ x <r.numsections () ؛ x ++) {
القسم s = r.getSection (x) ؛
لـ (int y = 0 ؛ y <s.numparapraphs () ؛ y ++) {
الفقرة P = S.GetParagraph (y) ؛
لـ (int z = 0 ؛ z <p.numcharacterruns () ؛ z ++) {
characterrun run = p.getCharacterrun (Z) ؛
نص سلسلة = run.text () ؛
system.out.print (text) ؛
}
}
}
}
الفراغ الثابت العام الرئيسي (سلسلة [] args) {
ملف ملف = ملف جديد ("/home/orisun/1.doc") ؛
يحاول {
FileInputStream Fin = جديد fileInputStream (ملف) ؛
سلسلة cont = readDoc1 (fin) ؛
system.out.println (cont) ؛
fin.close () ؛
fin = new FileInputStream (ملف) ؛
ReadDoc2 (fin) ؛
fin.close () ؛
} catch (ioException e) {
E.PrintStackTrace () ؛
}
}
}
مثال على استخراج POI PPT:
نسخة الكود كما يلي:
حزمة msoffice ؛
استيراد java.io.file ؛
استيراد java.io.fileInputStream ؛
استيراد java.io.ioException ؛
استيراد java.io.inputstream ؛
استيراد org.apache.poi.hslf.hslfslideshow ؛
استيراد org.apache.poi.hslf.extractor.powerpointextractor ؛
استيراد org.apache.poi.hslf.model.slide ؛
استيراد org.apache.poi.hslf.model.textrun ؛
استيراد org.apache.poi.hslf.usermodel.slideshow ؛
الفئة العامة ppt {
// استخراج جميع محتويات الشريحة مباشرة
السلسلة الثابتة العامة readDoc1 (inputStream) رمي ioException {
PowerPointExtractor extractor = New PowerPointExtractor (IS) ؛
إرجاع extractor.getText () ؛
}
// اقرأ شريحة واحدة شريحة واحدة
الفراغ الثابت العام readDoc2 (inputStream) يلقي ioexception {
عرض الشرائح SS = عرض شرائح جديد (HSLFSLIDESHOW (IS)) ؛
slide [] slides = ss.getSlides () ؛
لـ (int i = 0 ؛ i <slides.length ؛ i ++) {
// اقرأ عنوان الشريحة
عنوان السلسلة = الشرائح [i] .getTitle () ؛
System.out.println ("title:"+title) ؛
// اقرأ محتوى الشريحة (بما في ذلك العنوان)
Textrun [] يدير = slides [i] .gettextruns () ؛
لـ (int j = 0 ؛ j <runs.length ؛ j ++) {
System.out.println (تشغيل [j] .getText ()) ؛
}
}
}
الفراغ الثابت العام الرئيسي (سلسلة [] args) {
ملف ملف = ملف جديد ("/home/orisun/2.ppt") ؛
يحاول{
FileInputStream Fin = جديد fileInputStream (ملف) ؛
سلسلة cont = readDoc1 (fin) ؛
system.out.println (cont) ؛
fin.close () ؛
fin = new FileInputStream (ملف) ؛
ReadDoc2 (fin) ؛
fin.close () ؛
} catch (ioException e) {
E.PrintStackTrace () ؛
}
}
}
تتكون ملفات Excel من العديد من المصنفات ، ويتألف المصنف من أوراق متعددة.
مثال بسيط على Excel استخراج POI:
نسخة الكود كما يلي:
حزمة msoffice ؛
استيراد java.io.file ؛
استيراد java.io.fileInputStream ؛
استيراد java.io.ioException ؛
استيراد java.io.inputstream ؛
استيراد java.util.iterator ؛
استيراد org.apache.poi.hssf.usermodel.hssfcell ؛
استيراد org.apache.poi.hssf.usermodel.hssfrow ؛
استيراد org.apache.poi.hssf.usermodel.hssfsheet ؛
استيراد org.apache.poi.hssf.usermodel.hssfworkbook ؛
استيراد org.apache.poi.hssf.extractor.excelextractor ؛
استيراد org.apache.poi.poifs.filesystem.poifsfilesystem ؛
استيراد org.apache.poi.ss.usermodel.row ؛
الطبقة العامة Excel {
// اقرأ جميع محتويات Excel مباشرة
السلسلة الثابتة العامة readDoc1 (inputStream) رمي ioException {
HSSFWORKBOOK WB = NEW HSSFWORKBOOK (New POIFSFILESYSTEM (IS)) ؛
excelextractor extractor = new Excelextractor (WB) ؛
extractor.setformulasnotresults (false) ؛
extractor.setincludesheetnames (صواب) ؛
إرجاع extractor.getText () ؛
}
// صقل إلى الورقة أو الصف أو حتى الخلايا عند القراءة
getavg الثابتة العامة (inputStream)) يلقي ioException {
HSSFWORKBOOK WB = NEW HSSFWORKBOOK (New POIFSFILESYSTEM (IS)) ؛
// احصل على الورقة الأولى
ورقة HSSFSHEET = wb.getsheetat (0) ؛
جزيء مزدوج = 0.0 ؛
قاسم مزدوج = 0.0 ؛
// ورقة النقل سطرا
iterator <row> riTer = sheet.rowiterator () ؛
بينما (riter.hasnext ()) {
hssfrow row = (hssfrow) riter.next () ؛
HSSFCell Cell1 = row.getCell (4) ؛
HSSFCell cell2 = row.getCell (4) ؛
if (cell1.getCelltype ()! = hssfcell.cell_type_numeric) {
System.err.println ("خطأ نوع الرقم!") ؛
System.exit (-2) ؛
}
if (cell2.getCelltype ()! = hssfcell.cell_type_numeric) {
System.err.println ("خطأ نوع الرقم!") ؛
System.exit (-2) ؛
}
مثالم+= double.parsedouble (cell2.toString (). trim ()) ؛
جزيء+= double.parsedouble (cell2.toString (). trim ())*float.parsefloat (cell1.toString (). trim ()) ؛
}
جزيء الإرجاع/المقام ؛
}
الفراغ الثابت العام الرئيسي (سلسلة [] args) {
ملف ملف = ملف جديد ("/home/orisun/3.xls") ؛
يحاول{
FileInputStream Fin = جديد fileInputStream (ملف) ؛
سلسلة cont = readDoc1 (fin) ؛
system.out.println (cont) ؛
fin.close () ؛
fin = new FileInputStream (ملف) ؛
system.out.println ("متوسط درجة متوسط" + getavg (fin)) ؛
fin.close () ؛
} catch (ioException e) {
E.PrintStackTrace () ؛
}
}
}