يحتاج المشروع إلى تحليل المستندات Excel للحصول على البيانات ، لذلك وجدت بعض المعلومات عبر الإنترنت ، بالإضافة إلى استخدامي هذه المرة ، وكتبت تجربتي:
1. التبعيات التالية مطلوبة لمشروع Maven:
<Rependency> <roupEd> org.apache.poi </rougiD> <StifactId> poi </shintifactid> <الإصدار> 3.10-final </splements> </sependency> <sependency>
انتقل مباشرة إلى فئة الاختبار ، مع تعليقات كاملة في الفصل:
package shindo.java ؛ import java.io.fileinputstream ؛ import java.io.inputstream ؛ import java.util.arraylist ؛ import java.util.list ؛ import org.apache.poi.hssf.usermodel.hssfcell ؛ import org.poi.hsssf.ussmodel org.apache.poi.hssf.usermodel.hssfworkbook ؛ استيراد org.apache.poi.ss.usermodel.cell org.apache.poi.xssf.usermodel.xssfsheet ؛ import org.apache.poi.xssf.usermodel.xssfworkbook ؛ public class excelutil {public static void main (string [] حاول {list <list <string >> result = new excelutil (). readxls (path) ؛ system.out.println (result.size ()) ؛ لـ (int i = 0 ؛ i <result.size () ؛ i ++) {list <string> model = result.get (i) ؛ System.out.println ("ordernum:" + model.get (0) + "-> orderamount:" + model.get (1)) ؛ }} catch (استثناء e) {E.PrintStackTrace () ؛ } ستر excel file كائن نوع HSSFWorkbook ، والذي يمثل ملف Excel بالكامل. * 3. حلقة لكل صفحة من ملف excel هذا* 4. حلقة لكل صف في كل صفحة* 5. معالجة كل خلية في كل صف للحصول على قيمة هذه الخلية* 6. أضف نتيجة هذا السطر إلى صفيف قائمة* 7. أضف نتيجة كل صف إلى النتيجة الإجمالية النهائية* 8. = جديد fileInputStream (path) ؛ // HSSFWorkbook يحدد كامل HSSFWORKBOOK HSSFWORKBOOK = جديد HSSFWORKBOOK (IS) ؛ قائمة <list <string >> result = new ArrayList <list <string >> () ؛ int size = hssfworkbook.getNumberOfSheets () ؛ // حلقة كل صفحة ومعالجة صفحة الحلقة الحالية لـ (int numSheet = 0 ؛ numSheet <size ؛ numSheet ++) {// hssfsheet تحدد صفحة معينة hssfsheet hssfsheet = hssfworkbook.getsheetat (numSheet) ؛ if (hssfsheet == null) {contert ؛ } // معالجة الصفحة الحالية وقراءة كل صف لـ (int rownum = 1 ؛ rownum <= hssfsheet.getLastrownum () ؛ rownum ++) {// hssfrow يمثل الصف hssfrow hssfrow = hssfshet.getRow (rownum) ؛ int mincolix = hssfrow.getFirstCellNum () ؛ int maxcolix = hssfrow.getlastcellnum () ؛ قائمة <Tring> rowlist = new ArrayList <Tring> () ؛ // اجتياز الصفوف وتغيير الصفوف للحصول على معالجة كل عنصر خلية لـ (int colix = mincolix ؛ colix <maxcolix ؛ colix ++) {// hssfcell يمثل خلية hssfcell الخلية = hssfrow.getcell (colix) ؛ if (Cell == NULL) {متابعة ؛ } rowlist.add (getStringVal (cell)) ؛ } result.add (Rowlist) ؛ }} نتيجة الإرجاع ؛ } / ** * * * title: readxlsx * description: معالجة ملفات xlsx * param path * paramparam * @param athrows استثناء الملف * @قائمة return <string>> إرجاع نوع * athrows * / قائمة خاصة <string> readxlsx (مسار السلسلة) throws {throws {inputstre هو = new fileinputstre. XSSFWORKBOOK XSSFWORKBOOK = NEW XSSFWORKBOOK (IS) ؛ قائمة <list <string >> result = new ArrayList <list <string >> () ؛ // حلقة كل صفحة ومعالجة صفحة الحلقة الحالية لـ (xssfsheet xssfsheet: xssfworkbook) {if (xssfsheet == null) {متابعة ؛ } // معالجة الصفحة الحالية وقراءة كل صف لـ (int rownum = 1 ؛ rownum <= xssfsheet.getlastrownum () ؛ rownum ++) {xssfrow xssfrow = xssfsheet.getrow (rownum) ؛ int mincolix = xssfrow.getFirstCellNum () ؛ int maxcolix = xssfrow.getlastcellnum () ؛ قائمة <Tring> rowlist = new ArrayList <Tring> () ؛ لـ (int colix = mincolix ؛ colix <maxcolix ؛ colix ++) {xssfcell cell = xssfrow.getcell (colix) ؛ if (Cell == NULL) {متابعة ؛ } rowlist.add (cell.toString ()) ؛ } result.add (Rowlist) ؛ }} نتيجة الإرجاع ؛ } // المشكلات الموجودة/** في الواقع ، في بعض الأحيان البيانات التي نريد الحصول عليها هي البيانات الموجودة في Excel ، ولكن في النهاية ، يتم العثور على أن النتيجة ليست مثالية* إذا كانت البيانات الموجودة في Excel رقمًا ، فستجد أن واحدة المقابلة في Java أصبحت طريقة تدوين علمية. * لذلك عند الحصول على القيم ، تحتاج إلى القيام ببعض المعالجة الخاصة للتأكد من حصولك على النتائج التي تريدها. النهج عبر الإنترنت هو تنسيق البيانات العددية للحصول على النتائج التي تريدها. * فيما يلي طريقة أخرى. قبل ذلك ، دعونا نلقي نظرة على طريقة ToString () في POI: * * هذه الطريقة هي طريقة POI. من رمز المصدر ، يمكننا أن نجد أن تدفق المعالجة هو: * 1. احصل على نوع الخلية * 2. قم بتنسيق البيانات وفقًا للنوع وإخراجها. هذا يخلق الكثير من الأشياء التي لا نبحث عنها*، لذلك نقوم بتحويل هذه الطريقة. * / /*string public toString () {switch (getCellType ()) {case cell_type_blank: return "" ؛ case cell_type_boolean: return getBooleanCellValue ()؟ "صحيح": "خطأ" ؛ case cell_type_error: return erroreval.getText (geterRorCellValue ()) ؛ case cell_type_formula: return getCellformula () ؛ case cell_type_numeric: if (dateUtil.iscellDateFormatted (this)) {dateFormat sdf = new SimpleDateFormat ("dd-mmm-yyyy") return sdf.format (getDateCellValue ()) ؛ } return getNumericCellValue () + "" ؛ case cell_type_string: return getRichstringCellValue (). toString () ؛ الافتراضي: إرجاع "نوع الخلية غير المعروف:" + getCelltype () ؛ }}}* / / *** طريقة إعادة بناء tostring () من poi هي كما يلي* title: getTringVal* description: 1. بالنسبة لأنواع غير مألوفة ، أو فارغة ، " سلسلة إرجاع نوع * throws */ سلسلة ثابتة عامة getTringVal (HSSFCell Cell) {Switch (cell.getCelltype ()) {case cell.cell_type_boolean: return cell.getBooleanCellValue ()؟ "صحيح": "خطأ" ؛ case cell.cell_type_formula: return cell.getCellformula () ؛ case cell.cell_type_numeric: cell.setCelltype (cell.cell_type_string) ؛ return cell.getStringCellValue () ؛ case cell.cell_type_string: return cell.getStringCellValue () ؛ الافتراضي: إرجاع "" ؛ }}}لخص
ما سبق هو كل محتوى هذه المقالة حول استخدام حزمة POI لقراءة رمز مستند Excel في Java. آمل أن يكون ذلك مفيدًا للجميع. يمكن للأصدقاء المهتمين الاستمرار في الرجوع إلى الموضوعات الأخرى ذات الصلة على هذا الموقع. إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها. شكرا لك يا أصدقائك لدعمكم لهذا الموقع!