مثال: استيراد البيانات ذات الصلة (ملف Excel) ، وتحرير بيانات الملف ذات الصلة.
تكوين ملف XML
ثم قم بتكوين حجم الملف ليتم تحميله في ملف Spring XML
<!-اعتراض ملف التحميل ، قم بتعيين الحد الأقصى لحجم ملف التحميل 10M = 10*1024*1024 (B) = 10485760 بايت-> <Bean id = "multipartresolver"> <property name = "maxuploadsize" value = "10485760" /> < /bean>
تكوين واجهة JSP
<div> <form id = "sourcefile" name = "sourceFile" Action = "" method = "post" enctype = "multipart /form-data"> <input type = "button" value = "add" onClick = "addairline () /> <input style =" margin-left: 20px ؛ " id = "source_file" name = "sourceFile" type = "file" value = "select file" /> <input style = "margin-left: 20px ؛" تحميل البيانات = "لا ترسل مرارًا وتكرارًا" type = "إرسال" value = "upload" onClick = "UPPolicy ()"> <input style = "margin-left: 20px ؛" اكتب = "إرسال" value = "تنزيل قالب" onClick = "return downloadTemplate () ؛"> </part> </viv>
ملف JS
وظيفة uppolicy () {document.sourcefile.action = "/login/policy/eploadcsv" ؛ var submiturl = document.getElementById ("sourceFile"). السمات ["الإجراء"]. القيمة ؛ $ .ajax ({type: "post" ، url: submiturl ، data: $ ('#sourcefile'). Serialize () ، datatype: "json" ، success: function (result) {var json = json.parse (result) ؛ if (json.flag == "0" 0 "|| })}تكوين وحدة التحكم
requestMapping (value = "/eploadcsv" ، method = requestMethod.post) @Responsebody public exploadcsv ( @requestparam ("sourceFile") multipartfile sourceFile ، httpservletRequest request ، httpservletresponse response) throws ioexpice {// حدد الملف إذا كان ذلك فارغًا. // احصل على اسم سلسلة اسم الملف = sourcefile.getoriginalfilename () ؛ // تحديد ما إذا كان الملف فارغًا (أي ، حدد ما إذا كان حجمه 0 أو ما إذا كان اسمه فارغًا) حجم طويل = sourcefile.getSize () ؛ if (name == null || (""). equals (name) && size == 0) return null ؛ // استيراد دفعة. المعلمات: اسم الملف ، ملف. Boolean B = Batchimport (الاسم ، المصدر) ؛ jsonobject jsonobject = new JsonObject () ؛ if (b) {jsonobject.put ("flag" ، 0) ؛ jsonobject.put ("Success" ، "Batch Import Excel بنجاح!") ؛ } آخر {jsonobject.put ("flag" ، 1) ؛ jsonobject.put ("Success" ، "Batch Import Excel فشل!") ؛ } return jsonobject.toString () ؛ }الطبقات ليست مفصلة ، ويتم المعالجة في وحدة التحكم
BOATHIMPORT العام (اسم السلسلة ، ملف multipartfile) {boolean b = false ؛ // إنشاء ومعالجة excel excelutils readExcel = new excelutils () ؛ // تحليل Excel والحصول على مجموعة من معلومات العميل. قائمة <OtapolicyModel> cpolicylist = readExcel.getExcelInfo (الاسم ، الملف) ؛ if (cpolicylist! = null) {b = true ؛ } // إضافة معلومات تكرارية (ملاحظة: في الواقع ، يمكنك استخدام مجموعة cpolicylist مباشرة كمعلمة هنا ، واستخدم علامة foreach لإضافة ملف التعيين المقابل لـ mybatis لإضافة الدُفعات.) لـ (عميل otapolicymodel: cpolicylist) {policydao.insertotapolicy (العميل) ؛ } العودة ب ؛ }أداة فئة excelutils.java
وهذا هو ، الطرق التي يطلق عليها readexcel.getexcelinfo (الاسم ، الملف) ؛ بيان في الطريقة أعلاه والأساليب الأخرى ذات الصلة
يوفر Apache POI برامج APIs لبرامج Java لقراءة وكتابة أرشيف Microsoft Office Format. ومع ذلك ، أولاً وقبل كل شيء ، يتعين علينا الحكم على إصدار Excel واختيار مصنف مختلف (يتوافق إصدار 2003 مع HSSFWorkbook ، ويتوافق إصدار 2007 وما فوق مع XSSFWorkbook). بالإضافة إلى ذلك ، بشكل عام ، قم أولاً بنسخ الملف الذي تم تحميله بواسطة مستخدم العميل إلى القرص المحلي للخادم ، ثم قراءته من ملف النسخ هذا ، وبالتالي تجنب فقدان البيانات أو الفساد أثناء القراءة بسبب استثناءات الشبكة أو شروط العميل الأخرى.
package com.flight.inter.otaadapter.commons.util ؛ import com.flight.inter.intaadapter.model.otapolicymodel ؛ import org.apache.poi.hssf.usermodel.hssfworkbook ؛ org.apache.poi.ss.usermodel.sheet ؛ استيراد org.apache.poi.ss.usermodel.workbook ؛ استيراد org.apache.poi.xssf.usermodel.xssfworkbook org.springframework.web.multipart.commons.CommonsMultipartfile ؛ استيراد java.io. */فئة عامة excelutils {// إجمالي عدد الصفوف الخاصة int totalRows = 0 ؛ // إجمالي عدد القطع الخاصة int totalCells = 0 ؛ . // طريقة البناء excelutils العامة () {} // الحصول على إجمالي عدد الصفوف العامة int getTotalRows () {return totalRows ؛} // الحصول على إجمالي عدد الأعمدة العامة int getTotalCells () {return totalcells ؛} // get errice message public string geterrorinfo () {return errormsg ؛ } / *: العودة كاذبة } إعادة صواب ؛ } /** * اقرأ ملف excel واحصل على مجموعة معلومات العميل * param * regurn * /قائمة عامة <otapolicyModel> getExcelInfo (اسم ملف السلسلة ، multipartfile mfile) {// تحويل multipartfile بواسطة ملف الربيع إلى commonsmultipartfile type commonsmultfile cf = (commononsmultfile // احصل على ملف ملف مسار التخزين المحلي = ملف جديد ("d: // fileupload") ؛ // إنشاء دليل (يتم تحديد اسم المسار الخاص به بواسطة كائن الملف الحالي ، بما في ذلك أي مسار الأصل المطلوب.) if (! file.exists ()) file.mkdirs () ؛ // قم بإنشاء ملف ملف جديد 1 = ملف جديد ("d: // fileupload" + new Date (). getTime () + ".xlsx") ؛ // اكتب الملف الذي تم تحميله إلى الملف الذي تم إنشاؤه حديثًا ، TRAWER {cf.getFileItem (). write (file1) ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ } // تهيئة مجموعة قائمة معلومات العميل <OtapolicyModel> CustomerList = new ArrayList <OtapolicyModel> () ؛ // تهيئة دفق المدخلات inputStream = null ؛ حاول {// تحقق مما إذا كان اسم الملف مؤهلاً if (! valuityExcel (filename)) {return null ؛ } // الافتراضي ما إذا كان الملف هو الإصدار 2003 أو الإصدار 2007 استنادًا إلى اسم الملف Boolean Isexcel2003 = True ؛ if (wdwutil.isexcel2007 (اسم الملف)) {isexcel2003 = false ؛ } // Instantiene تدفق الإدخال بناءً على الملف الذي تم إنشاؤه حديثًا هو = جديد fileInputStream (file1) ؛ // اقرأ معلومات العميل بناءً على المحتوى في excel CustomerList = getExcelInfo (IS ، isexcel2003) ؛ is.close () ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ } أخيرًا {if (is! = null) {try {is.close () ؛ } catch (ioException e) {is = null ؛ E.PrintStackTrace () ؛ }} return customerlist ؛ } / *** اقرأ معلومات العميل استنادًا إلى المحتوى في Excel* param هو دفق الإدخال* param isexcel2003 هو excel 2003 أو 2007 إصدار* regurn* throws ioException* / public list <Otapolicodel> getExcelInfo (inputstream is ، boolean isscel2003) جرب { / ** حدد الطريق لإنشاء مصنف وفقًا للإصدار* / Workbook wb = null ؛ // عندما يكون Excel 2003 if (isexcel2003) {wb = new HSSfworkBook (IS) ؛ } آخر {// عندما يكون excel 2007 wb = new xssfworkbook (is) ؛ } // اقرأ معلومات العميل في excel CustomerList = ReadExcelValue (WB) ؛ } catch (ioException e) {E.PrintStackTrace () ؛ } إرجاع CustomerList ؛ } /** * اقرأ معلومات العميل في excel * param wb * regurn * /قائمة خاصة <OtapolicyModel> readExcelValue (Workbook wb) {// احصل على ورقة shell الأولى = wb.getsheetat (0) ؛ // احصل على عدد الصفوف في Excel this.totalRows = sheet.getPhysicalNumberOfRows () ؛ // احصل على عدد الأعمدة في Excel (من المفترض أن يكون هناك صفوف) إذا (TotalRows> = 1 && sheet.getRow (0)! = null) {this.totalcells = sheet.getRow (0) .getPhysicalNumberOfCells () ؛ } list <OtapolicyModel> otapolicyModellist = new ArrayList <OtapolicyModel> () ؛ otapolicymodel otapolicymodel. // رقم صف Excel ، بدءًا من السطر الثاني. لا يتم تخزين العنوان لـ (int r = 1 ؛ r <totalRows ؛ r ++) {row row = sheet.getRow (r) ؛ إذا (الصف == فارغ) متابعة ؛ otapolicyModel = جديد otapolicyModel () ؛ جرب {thread.currentThRead (). النوم (1) ؛ } catch (interruptedException e) {E.PrintStackTrace () ؛ } otapolicyModel.setPolicyId (System.CurrentTimeMillis ()) ؛ // Collection of Excel لـ (int c = 0 ؛ c <this.totalcells ؛ c ++) {cell cell = row.getCell (c) ؛ if (null! = cell) {if (c == 0) {otapolicymodel.setsource (cell.getStringCellValue ()) ؛ // supplier} else else (c == 1) {otapolicymodel.setVendee (cell.getStringCellValue () ؛ // outgannt expans}} el e e e e e e e el ==) if (cell.getStringCellValue () == "all") {triptype = 0 ؛ } آخر إذا (cell.getStringCellValue (). يساوي ("way-way")) {triptype = 10 ؛ } آخر إذا (cell.getStringCellValue (). يساوي ("رحلة ذهابًا وإيابًا")) {triptype = 20 ؛ } آخر إذا (cell.getStringCellValue (). يساوي ("رحلة مباشرة واحدة")) {triptype = 11 ؛ } آخر إذا (cell.getStringCellValue (). يساوي ("رحلة ذهابًا وإيابًا")) {triptype = 12 ؛ } آخر إذا (cell.getStringCellValue (). يساوي ("رحلة ذهابًا وإيابًا")) {triptype = 21 ؛ } آخر إذا (cell.getStringCellValue (). يساوي ("رحلة ذهابًا وإيابًا")) {triptype = 21 ؛ } آخر إذا (cell.getStringCellValue (). يساوي ("رحلة ذهابًا وإيابًا")) {triptype = 22 ؛ } otapolicymodel.settriptype (triptype) ؛ // نوع خط سير الرحلة} آخر إذا (c == 3) {otapolicymodel.setCarrier (cell.getStringCellValue () المدينة} آخر إذا (c == 5) {otapolicyModel.SetArrcity (cell.getStringCellValue ()) ؛ // landing city} آخر إذا (c == 6) {otapolicyModel.SetSalebegindatel (جديد BigDecimal (cell.getNumericCellValue ()). BigDecimal (cell.getNumericCellValue ()). BigDecimal (cell.getNumericCellValue ()). BigDecimal (cell.getNumericCellValue ()). if (cell.getStringCellValue (). يساوي ("All")) {CabinType = 9 ؛ } آخر إذا (cell.getStringCellValue (). يساوي ("الدرجة الاقتصادية")) {CabinType = 1 ؛ } آخر إذا (cell.getStringCellValue (). يساوي ("الأعمال")) {cabinType = 2 ؛ } آخر إذا (cell.getStringCellValue (). يساوي ("الدرجة الأولى")) {CabinType = 3 ؛ } otapolicyModel.setCobinType (CabinType) ؛ // cadrift level} else if (c == 11) {otapolicyModel.setFdType (cell.getStringCellValue (). equals ("حسب نطاق السعر")؟ 1: 2) ؛ otapolicymodel.setcabin (cell.getStringCellValue ()) ؛ // cat} آخر إذا (c == 13) {otapolicyModel.setPriceBegin (cell.getNumericCellValue ()) ؛ otapolicyModel.setPriceend (cell.getNumericCellValue ()) ؛ // الحد الأقصى للسعر} آخر إذا (c == 15) {otapolicymodel.setlmoney (cell.getNumericCellValue ()) ؛ otapolicymodel.setfpercent (cell.getNumericCellValue ()) ؛ // خصم السعر الكامل} آخر إذا (C == 17) {otapolicodel.setftpercent (cell.getNumericCellValue ()) ؛ if (cell.getStringCellValue (). يساوي ("نعم")) {carrierlimit = 1 ؛ } آخر إذا (cell.getStringCellValue (). يساوي ("لا")) {carrierlimit = 0 ؛ } آخر إذا (cell.getStringCellValue (). يساوي ("لا شيء")) {carrierlimit = 2 ؛ } otapolicymodel.setCarrierLimit (carrierlimit) ؛ // قيود شركة الطيران الفاتورة} آخر إذا (c == 19) {int transport = 2 ؛ if (cell.getStringCellValue (). يساوي ("نعم")) {transport = 1 ؛ } آخر إذا (cell.getStringCellValue (). يساوي ("لا")) {transport = 0 ؛ } آخر إذا (cell.getStringCellValue (). يساوي ("لا")) {transport = 0 ؛ } آخر إذا (cell.getStringCellValue (). يساوي ("لا")) {transport = 0 ؛ } آخر إذا (cell.getStringCellValue (). يساوي ("لا")) {transport = 0 ؛ } آخر إذا (cell.getStringCellValue (). يساوي ("لا")) {transport = 0 ؛ } آخر إذا (cell.getStringCellValue (). يساوي ("لا")) {transport = 0 ؛ } آخر إذا (cell.getStringCellValue (). يساوي ("غير محدود")) {transport = 2 ؛ } otapolicyModel.setTransport (Transport) ؛ // دعم النقل متعدد الوسائط} آخر إذا (C == 20) {int shareflight = 2 ؛ if (cell.getStringCellValue (). يساوي ("نعم")) {shareflight = 1 ؛ } آخر إذا (cell.getStringCellValue (). يساوي ("لا")) {shareflight = 0 ؛ } آخر إذا (cell.getStringCellValue (). يساوي ("لا شيء")) {shareflight = 2 ؛ } otapolicymodel.setsharedflight (shareflight) ؛ // دعم الرحلات المشتركة} elder if (c == 21) {otapolicyModel.setpstatus (cell.getStringCellValue (). if (cell.getStringCellValue (). يساوي ("خاص")) {faretype = 1 ؛ } آخر إذا (cell.getStringCellValue (). يساوي ("المنشور")) {faretype = 2 ؛ } آخر إذا (cell.getStringCellValue (). يساوي ("المنشور")) {faretype = 2 ؛ } آخر إذا (cell.getStringCellValue (). يساوي ("الكل")) {faretype = 0 ؛ } otapolicymodel.setfaretype (faretype) ؛ // نوع الشحن} آخر إذا (c == 23) {otapolicymodel.setLimItPrice (new bigdecimal (cell.getnumericcellvalue ()). if (c == 24) {int limittransit = 2 ؛ if (cell.getStringCellValue (). يساوي ("الكل")) {limitTransit = 2 ؛ } آخر إذا (cell.getStringCellValue (). يساوي ("قابل للتطبيق")) {limitTransit = 0 ؛ } آخر إذا (cell.getStringCellValue (). يساوي ("غير قابل للتطبيق")) {limitTransit = 1 ؛ } otapolicymodel.setlimittransit (limitTransit) ؛ // limit transition} آخر إذا (c == 25) {otapolicymodel.setarrcity (cell.getStringCellValue ()) if (cell.getStringCellValue (). يساوي ("الكل")) {limitnation = 2 ؛ } آخر إذا (cell.getStringCellValue (). يساوي ("قابل للتطبيق")) {limitnation = 0 ؛ } آخر إذا (cell.getStringCellValue (). يساوي ("غير قابل للتطبيق")) {limitnation = 1 ؛ } otapolicymodel.setlimitnation (limitnation) ؛ // حد الجنسية} آخر إذا (c == 27) {otapolicyModel.setArrCity (cell.getStringCellValue () ؛ } // إضافة العميل otapolicymodellist.add (otapolicyModel) ؛ } إرجاع otapolicymodellist ؛ }}أدوات فئة wdwutil.java
Package com.flight.inter.otaadapter.commons.util ؛/*** تم إنشاؤه بواسطة ling.zhang في 2016/12/29. */ الفئة العامة wdwutil {//description: سواء كان ذلك excel لعام 2003 ، فإن Return true هو 2003 عام 2003 isexcel2003 (السلسلة filepath) {return filepath.matches ("^.+/. (؟ i) (xls) $") ؛ } //@الوصف: ما إذا كان Excel لعام 2007 ، Return True هو 2007public static boolean isexcel2007 (سلسلة filepath) {return filepath.matches ("^.+//. (؟ i) (xlsx) $") ؛}}}}}}}}}}}}ملاحظة: من أجل قراءة الراحة ، يتم نشر الرمز أعلاه لأول مرة مع طريقة الأصل ثم طريقة الطفل. في تحرير التعليمات البرمجية الفعلية ، يتم تحرير طريقة الطفل بشكل عام أولاً ثم يتم تحريره باستخدام طريقة الأصل. على سبيل المثال ، يجب أولاً تحرير رمز فئة الأدوات ، ثم قم بتحرير رمز طبقة الخدمة ، وأخيراً تحرير رمز وحدة التحكم.
وبهذه الطريقة ، فإن العملية برمتها على ما يرام. خذها لاختبارها الآن
لمزيد من المحتوى المثير ، يرجى النقر فوق "تحميل Spring وتنزيل موضوع خاص" للدراسة والبحث المتعمرين.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.