1. مفهوم مقدمة
Apachepoi هي مكتبة مفتوحة المصدر لمؤسسة Apache Software Foundation. يوفر POI برامج APIs لبرامج Java لقراءة وكتابة أرشيف Microsoft Office.
2. الكود المتعلق بالوظيفة
1. الوصف البيئة: JDK1.7+Tomcat7+الربيع
2. تكوين ملف التكوين
إضافة تبعيات POI المطلوبة في ملف POM
<!-أضف دعم POI-> <reperency> <roupiD> org.apache.poi </rougiD> <StifactId> poi </shintifactid> <sored> 3.13 </version> </redation> <redenced> <roupend> org.apache.poi </groupid>
تحميل ملف تكوين spring-mvc.xml
<bean id = "multipartresolver"> <!-الترميز الافتراضي-> <property name = "defaultencoding" value = "utf-8" /> <!-أقصى قيمة حجم الملف-> <property name = "maxuploadsize" value = "10485760000 /> <! </bean>
3. فئات الأدوات ذات الصلة وكتابة الكود
فئة أدوات التحليل Excel (ImportExcelutil.java)
package com.jointem.hrm.Utils ؛ import org.apache.poi.hssf.usermodel.hssfworkbook ؛ import org.apache.poi.ss.usermodel.cell org.apache.poi.ss.usermodel.workbook ؛ استيراد org.apache.poi.ss.util.cellrangeaddress ؛ استيراد org.apache.poi.xssf.usermodel.xssfworkbook java.text.simpleDateFormat ؛ استيراد java.util.arraylist ؛ استيراد java.util.list ؛/*** تم إنشاؤه بواسطة jenking في 2017/9/8. */فئة عامة eSporeXcelUtil {private Final Static String Excel2003l = ". XLS" ؛ // 2003- إصدار Excel Private Final String excel2007u = ". xlsx" ؛ // 2007+ إصدار من Excel/** * الوصف: احصل على البيانات في دفق IO وتجميعها في قائمة <list <object> object * param in ، filenlet * @return * throws ioexception */public list <abome>> getBankListByexcel (inputStream in ، string filename) throws consection {list> list <object> // إنشاء عمل Excel Workbook = this.getworkbook (في ، اسم الملف) ؛ if (null == work) {رمي استثناء جديد ("إنشاء ورقة عمل excel على أنها فارغة!") ؛ ورقة ورقة = فارغة ؛ صف الصف = فارغ ؛ خلية الخلية = فارغة ؛ list = new ArrayList <list <Object >> () ؛ // tranquility جميع الأوراق في excel لـ (int i = 0 ؛ i <work.getNumberOfSheets () ؛ i ++) {sheet = work.getSheetat (i) ؛ if (sheet == null) {contert ؛} // tranquility all plans in the sheet susty.out.println (sheet.getLastrownum ()) ؛ لـ (int j = sheet.getfirstrownum () ؛ j <= sheet.getlastrownum ()-11 ؛ j ++) {row = sheet.getRow (j) ؛ // if (row == null || row.getfirstcellnum () == j) // {// contem ؛ //} // travers لـ (int y = row.getfirstcellnum () ؛ y <row.getlastcellnum () ؛ y ++) {cell = row.getCell (y) ؛ if (this.ismergedregion (sheet ، j ، y)) {li.add (this.getmergedregionvalue (sheet ، j ، y)) ؛ } آخر {li.add (this.getCellValue (cell)) ؛ }} list.add (li) ؛ }} work.close () ؛ قائمة العودة } / ** * الوصف: وفقًا لمنسق الملف ، تم تحميل إصدار الملف على نحو تكيفي * param instr ، filename * regurn * throws استثناء * / Workbook Public Workbook (InputStream Instr ، اسم ملف السلسلة) يلقي الاستثناء {Workbook wb = null ؛ String fileType = filename.substring (filename.lastindexof (".")) ؛ if (excel2003l.equals (fileType)) {wb = new HSSfworkBook (instr) ؛ // 2003-} آخر إذا (excel2007u.equals (fileType)) {wb = new xssfworkbook (instr) ؛ // 2007+} آخر {رمي استثناء جديد ("تنسيق الملف المحسّن غير صحيح!") ؛ } إرجاع WB ؛ } / ** * الوصف: تنسيق القيم في الجدول * param cell * @return * / كائن عام getCellValue (خلية الخلية) {كائن value = null ؛ decimalformat df = new decimalformat ("0") ؛ . // Date Format decimalformat df2 = new decimalformat ("0") ؛ // مفتاح رقم التنسيق (cell.getCelltype ()) {case cell.cell_type_string: value = cell.getRichStringCellValue (). getTring () ؛ استراحة؛ case cell.cell_type_numeric: if ("general" .equals (cell.getCellStyle (). } آخر إذا ("m/d/yy" .equals (cell.getCellStyle (). } آخر {value = df2.format (cell.getNumericCellValue ()) ؛ } استراحة؛ case cell.cell_type_boolean: value = cell.getBooleanCellValue () ؛ استراحة؛ case cell.cell_type_blank: value = "" ؛ استراحة؛ الافتراضي: استراحة ؛ } قيمة الإرجاع ؛ } / ** * احصل على محتوى الخلية المدمجة * param sheet * param row * param column * @regurn * / public getmergedregionvalue (ورقة ورقة ، int row ، عمود int) {int slegeCount = sheet.getNummergedReghing () ؛ لـ (int i = 0 ؛ i <sheetmergeCount ؛ i ++) {cellRangeadDress ca = sheet.getmergedregion (i) ؛ int firstColumn = ca.getFirstColumn () ؛ int lastColumn = ca.getLastColumn () ؛ int firstrow = ca.getFirstrow () ؛ int lastrow = ca.getLastrow () ؛ if (row> = firstrow && row <= lastrow) {if (column> = firstColumn && column <= lastColumn) {row frow = sheet.getRow (firstrow) ؛ الخلية fcell = frow.getCell (FirstColumn) ؛ إرجاع this.getCellValue (fcell) ؛ }} الإرجاع null ؛ } / ** * حدد ما إذا كانت خلية مدمجة * param sheet * param row * param column * @return * / public boolean ismergedregion (ورقة ، int row ، عمود int) {int slegeCount = sheet.getNummergedReghions () ؛ لـ (int i = 0 ؛ i <sheetmergeCount ؛ i ++) {cellRangeadDress range = sheet.getmergedregion (i) ؛ int firstColumn = range.getFirstColumn () ؛ int lastColumn = range.getLastColumn () ؛ int firstrow = range.getfirstrow () ؛ int lastrow = range.getLastrow () ؛ if (row> = firstrow && row <= lastrow) {if (column> = firstColumn && column <= lastColumn) {return true ؛ }}} return false ؛ }} طلب وحدة تحكم (صفحة العملية Excel استيراد طلب)
حزمة com.poiexcel.control ؛ استيراد java.io.inputstream ؛ استيراد java.io.printwriter ؛ استيراد java.util.list ؛ استيراد javax.servlet.http.httpservletrequest ؛ استيراد javax.servlet.http.httpservletresponse ؛ استيراد org.springframework.stereotype.controller ؛ استيراد org.springframework.web.bind.annotation.requestmapping ؛ استيراد org.springframework.web.bind.annotation.requestmethod ؛ استيراد org.springframework.web.bind.annotation.ResponseBody ؛ استيراد org.springframework.web.multipart.multipartfile ؛ استيراد org.springframework.web.multipart.multiparthttpservletRequest ؛ استيراد com.poiexcel.util.importexcelutil ؛ استيراد com.poiexcel.vo.infovo ؛ controller @requestmappapping ("/uploadexcel/ *") الفئة العامة uploadexcelControl {/** * الوصف: استيراد ملف excel من خلال إرسال النموذج التقليدي * request request * therwes requestment */ @requestMapp يلقي استثناء {multiparthttpservletrequest multiredartrequest = (multiparthttpservletRequest) ؛ inputStream في = null ؛ قائمة <list <Object >> listOb = null ؛ ملف multipartFile = multipartrequest.getFile ("Upfile") ؛ if (file.isempty ()) {رمي استثناء جديد ("الملف غير موجود!") ؛ } في = file.getInputStream () ؛ listOb = new ImportExcelUtil (). getBankListbyExcel (في ، file.getoriginalfilename ()) ؛ in.close () ؛ // يمكن استدعاء طريقة الخدمة المقابلة هنا لحفظ البيانات في قاعدة البيانات. الآن يتم إخراج البيانات فقط لـ (int i = 0 ؛ i <listoB.size () ؛ i ++) {list <object> lo = listob.get (i) ؛ infovo vo = new Infovo () ؛ vo.setCode (string.valueof (lo.get (0))) ؛ vo.setName (string.valueof (lo.get (1))) ؛ vo.setDate (string.valueof (lo.get (2))) ؛ vo.setMoney (string.valueof (lo.get (3))) ؛ System.out.println ("معلومات الطباعة-> المؤسسة:"+vo.getCode ()+"الاسم:"+vo.getName ()+"الوقت:"+vo.getDate ()+"Asset:"+vo.getMoney ()) ؛ } إرجاع "النتيجة" ؛ } رمز الواجهة الأمامية
يستخدم الواجهة الأمامية ملف مكون تحميل الملف من bootstrap ، ويحتاج إلى تقديم fileinput.css ، fileinput.js ، zh.js ، bootstrap.css ، botstrap.js ، jquery.min.js
<Body> <h4> إدخال معلومات الحضور </h4> <method method = "post" enctype = "multipart/form-data" id = "form1" Action = "$ {pagecontext.request.contextpath}/upploy/uploadexcel $ ('#file-zh'). fileInput ({language: 'zh' ، uploadurl: '$ {pageContext.request.contextpath}/engledance/uploadexcel' ، المسموح بها. كائن VO ، احفظ الكائن المقابل لبيانات Excel
حزمة com.poiexcel.vo ؛ // تحويل كل صف من excel إلى كائن فئة عامة infovo {private string code ؛ اسم السلسلة الخاصة ؛ تاريخ السلسلة الخاصة ؛ سلسلة خاصة السلسلة العامة getCode () {Return Code ؛ } public void setCode (string code) {this.code = code ؛ } السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ } السلسلة العامة getDate () {return date ؛ } public void setDate (تاريخ السلسلة) {this.date = date ؛ } السلسلة العامة getMoney () {return Money ؛ } public void setMoney (String Money) {this.money = money ؛ }}3. عرض التأثير
1. عرض الصفحة
2. طباعة معلومات الواجهة الخلفية
4. ملخص
هذا المثال يخرج البيانات المستوردة فقط في وحدة التحكم ولا تستمر. إذا كنت ترغب في الاستمرار ، فما عليك سوى الاتصال بطبقة الخدمة في موقع التعليق
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.