تشترك هذه المقالة في استيراد دفعة من بيانات جدول Excel في Java للرجوع إليه. المحتوى المحدد هو كما يلي: استيراد java.awt.color ؛ استيراد java.io.bytearrayinputstream ؛ استيراد java.io.bytearrayoutputstream ؛ استيراد java.io.file ؛ استيراد java.io.fileInputStream ؛ استيراد java.io.inputstream ؛ استيراد java.lang.reflect.field ؛ استيراد java.text.dateformat ؛ استيراد java.text.decimalformat ؛ استيراد java.text.simpledateformat ؛ استيراد java.util.*؛ استيراد javax.swing.text.attributeset ؛ استيراد javax.swing.text.element ؛ استيراد javax.swing.text.html.css ؛ استيراد javax.swing.text.html.htmldocument ؛ استيراد javax.swing.text.html.htmleditorkit ؛ استيراد cn.vrview.dev.common.Exception.BusinessException ؛ استيراد org.apache.commons.lang3.StringUtils ؛ استيراد org.apache.logging.log4j.logmanager ؛ استيراد org.apache.logging.log4j.logger ؛ استيراد org.apache.poi.hssf.usermodel.*؛ استيراد org.apache.poi.hssf.util.hssfcolor ؛ استيراد org.apache.poi.ss.usermodel.*؛ استيراد org.apache.poi.ss.util.cellrangeaddress ؛ استيراد org.apache.poi.xssf.usermodel.xsssfcolor ؛ استيراد org.apache.poi.xssf.usermodel.xssffont ؛ استيراد org.apache.poi.xssf.usermodel.xsssfworkbook ؛ استيراد org.springframework.web.util.htmlutils ؛ استيراد cn.vrview.dev.common.util.stringutil ؛ الفئة العامة exceltools { / ** log* / private static logger log = logManager.getLogger () ؛ /** * Export Excel * <p> * الاستخدام: <br> * <code> قائمة <map <string ، Object >> datalist = new ArrayList <map <string ، object> () ؛ <br> * is = excelts.exportxls (datalist ، string new [] {"createTime: date" ، "الاسم:" الجنس: ". * </code> * * param جمع * جمع البيانات ليتم تصديره * param header * العمود ليتم تصديره * @إدخال ملف إدخال inputstream */ public inportStream orportxls (collection <map ، object> collect ، string [] header) HSSFWorkbook Book = new HSSFWorkBook () ؛ حاول {// إضافة ورقة ورقة HSSFSHEET = book.CREATESHEET ("sheet1") ؛ // تحديد مجموعة أسماء الأعمدة المراد تصديرها Set <String> Columns = New Hashset <String> () ؛ // قم بتعيين لون خلفية الخلية HSSFCellStyle CellStyle = Book.CreateCellStyle () ؛ cellstyle.setfillpattern (HSSfCellStyle.solid_foreground) ؛ cellstyle.setfillForeGroundColor (New Hssfcolor.yyellow (). getIndex ()) ؛ // إنشاء header hssfrow row = sheet.createrw (0) ؛ HSSFCell Cell = row.createCell (0) ؛ cell.setCellStyle (cellstyle) ؛ cell.setCellValue ("Sequence") ؛ يبدأ رقم العمود من 1 int n = 1 ؛ // parse header string لـ (String str: header) {string [] arr = str.split (":") ؛ columns.add (n + "،" + arr [0]) ؛ // أضف اسم الحقل للتصدير وربط رقم العمود n cell = row.createcell (n) ؛ cell.setCellStyle (cellstyle) ؛ cell.setCellValue (arr [1]) ؛ n ++ ؛ } // إنشاء صفوف بيانات تبدأ من 1 ، 0 هو الرأس int i = 1 ؛ // إنشاء صفوف بيانات لـ (Map <String ، Object> Map: Collection) {hssfrow dataRow = sheet.createrw (i) ؛ // إنشاء رقم التسلسل datarow.createcell (0) .setCellValue (i) ؛ // إنشاء أعمدة أخرى لـ (عمود السلسلة: الأعمدة) {// استخدم الفواصل للحصول على اسم الحقل ، [0] هو رقم العمود ليتوافق مع رأس الرأس. string columnName = column.split ("،") [1] ؛ // إنشاء خلية عمود رقم التسلسل = datarow.createcell (integer.parseint (column.split ("،") [0])) ؛ قيمة السلسلة = "" ؛ value = map.get (columnName) + "" ؛ // تحويل إلى "" if ("null" .equals (value)) {value = "" "؛ } RichTextString RichTextString = ProcessHtml (كتاب ، قيمة) ؛ cell.getCellStyle (). setWrapText (false) ؛ cell.setCellValue (RichTextString) ؛ } i ++ ؛ } book.write (out) ؛ out.close () ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ } إرجاع bytearrayinputStream جديد (Out.TobyTearRay ()) ؛ } /** * الحصول على بيانات ملف Excel <br> * الاستخدام: <br> * sheetInfo sheetInfo = new Exceltools (). new sheetInfo () ؛ <br> * sheetInfo.setRowtitle (0) ؛ قائمة <Tring> Sheets = new ArrayList <String> () ؛ <br> * String sheetName = "sheet1" ؛ Sheets.Add (sheetname) ؛ <br> * sheetinfo.setsheetnames (الأوراق) ؛ <br> * sheetinfo.setColumnSmapping (سلسلة جديدة [] {"prodname: اسم المنتج" ، * "prodspec: المواصفات" ، "CollectPrice: Price:" + {link regexpenum} * regexpenum.notempty_isnumber ، "priceunit:" collectmarmet: quotation " <br> * خريطة <string ، list> data = exceltools.getExcel (ملف جديد (path) ، sheetInfo) ؛ * * param * * param sheetinfo * معلومات التهيئة * خريطة العودة {sheet1: list} * throws استثناء * استثناء */ suppressWarnings ("RawTypes") خريطة ثابتة عامة getExcel (file f ، seachinfo sheetinfo ، string exceltype) throws inscared {return getExcel (fileInteMpterem (f) ، } suppressWarnings ({"RawTypes" ، "Uncheced"}) MAP STATIC STATIC GETEXCEL (inputStream in ، sheetinfo sheetinfo ، string exceltype) يلقي استثناء {MAP ، String> columnsmap = new hashmap <string ، string> () ؛ // Column التحقق من التعبير قائمة خريطة التعبير <Tring> errmsg = new ArrayList <String> () ؛ int errnum = 0 ؛ // إجمالي عدد الأخطاء int errlimit = 10 ؛ // الحد من عدد مطالبات الخطأ/ ** المستخدمة لتخزين جميع المحتويات التي يقرأها Excel وفقًا للقواعد المحددة*/ MAP ExcelInfo = new hashmap () ؛ كتاب Workbook = null ؛ جرب {if (exceltype.equals ("xls")) {book = new HSSFWorkBook (in) ؛ // رمي BusinessException ("إصدار Excel منخفض جدًا ، يرجى استخدام الإصدار 2007 أو أعلى (تمديد: XLSX)") ؛ } آخر {book = new xssfworkbook (in) ؛ }} catch (OutofMemoryError e) {رمي new RunTimeException ("ملف Excel الحالي كبير جدًا ، يرجى التحقق مما إذا كانت هناك بيانات فارغة غير صالحة في كل جدول ورقة ، بما في ذلك بيانات الصف والعمود بتنسيق وسلبي ، يرجى حذف هذه البيانات غير الصالحة! حجم ملف Excel العادي [داخل 1m]") ؛ } // checkTitle (كتاب ، sheetInfo) ؛ // احصل على عدد أوراق العمل intnum = sheetInfo.getSheetNames (). size () ؛ // حلقة جميع أوراق العمل وقراءة البيانات الموجودة في (int sheetIndex = 0 ؛ sheetIndex <sheetnum ؛ sheetIndex ++) {// احصل على sheetname string string abourseate الحالي = htmlutils.htmlunescape (sheetInfo.getSheetNames (). get (sheetindex)) ؛ خريطة <string ، string> validateMap = new HashMap <string ، string> () ؛ لـ (String mapstr: sheetinfo.getColumnsMapping (). get (sheetName)) {string [] arr = mapstr.split (":") ؛ columnsmap.put (arr [1] ، arr [0]) ؛ if (arr.length == 3) {// إذا لم يكن تعبير التحقق فارغًا ، فأضفه إلى الخريطة إلى ValidateMap.put (arr [1] ، arr [2]) ؛ }} ورقة ورقة = book.getSheet (sheetName) ؛ if (null == sheet) {رمي new RunTimeException (string.format ("فشل في الحصول على الجدول ، يرجى تأكيد ما إذا كانت الورقة" ٪ s "في excel" ، sheetname)) ؛ } // المستخدمة لتخزين محتوى البيانات في قائمة ورقة ورقة العمل = جديد arraylist () ؛ // احصل على عدد الصفوف في الجدول الحالي int Rows = sheet.getLastrownum () ؛ // احصل على عدد الأعمدة في أعمدة الجدول الحالي int = sheet.getRow (sheetInfo.getRowTitle ()). getLastCellNum () ؛ if (الصفوف <= sheetInfo.getRowTitle ()) {// إذا لم يكن للجدول الحالي البيانات المطلوبة ، تابع الحلقة التالية ؛ } // احصل على قائمة محتوى عنوان ورقة العمل الحالية <Tring> titlelist = new ArrayList <string> () ؛ // حلقة كل خلية في كل صف وقراءة القيمة في صف الخلية titlerow = sheet.getRow (sheetInfo.getRowTitle ()) ؛ لـ (int jj = 0 ؛ jj <أعمدة ؛ jj ++) {cell celltitle = titlerow.getCell (jj) ؛ if (celltitle! = null) {int row = celltitle.getRowIndex () ؛ عمود int = celltitle.getColumnIndex () ؛ if (ismergedregion (ورقة ، صف ، عمود))) } آخر {titlelist.add (getCellValue (celltitle)) ؛ }} آخر {رمي جديد RunTimeException ("خطأ في قراءة رأس الجدول ، تم تعيينه حاليًا على" th " + (sheetInfo.getRowTitle () + 1) +" الصف <br/> محتوى رأس الجدول هو: " + titlerow +" ، يرجى التحقق من ذلك. System.out.println (Titlelist) ؛ (stringutils.deleteWhiteSpace (t) .equalsignorecase (Colarr [1]) {include = true ؛ لـ (int i = sheetinfo.getRowtitle () j <أعمدة ؛ columnsmap.keyset ()) // Cell Background Color (exceltype.equals ( XSSFColor Color = ( الخلية) ؛ +1)) ؛ columnsmap.get (columntitle) ؛ eum.getText () ؛ Value.trim () + "لا يتطابق مع! / /rowmap.pt (ColumnMapping ، GetMergeionvalue (Row ، Column) ؛ 0) {if (errnum> errlimit) {errmsg.add ("قالب البيانات الذي تم استيراده هو خطأ في التنسيق (Total". RunDimeException (Test ") ؛ errmsg = new ArrayList <string> () ؛ (arr.length == 3) {// إذا كان تعبير التحقق فارغًا ، فأضفه إلى الخريطة إلى ValityAtemap.put (ARR [1]) ؛ // الحصول على عدد من أوراق العمل intnum = book.getnumberofsheets () ؛ / / احصل على عدد الصفوف int int = sheetlastrownum () ؛ titlerow.getlastcellnum () ؛ رمي الوقت الجديد ("تنسيق الملف غير صحيح ، يرجى إعادة تحديد القالب") ؛ Titlelist.add (titlerow.getcell (jj) .getStringCellValue ()) ؛ (! titlelist.contains (S.Split (":") والقراءة من السطر أدناه (int i = sheetinfo.getRowTitle () إذا كان (" ValyAtemap.get (ColumnTitle) {// التحقق من التعبير العادي regexpenum = regexpenum.valueof (alighteMap .get (columntitle) ؛ (value.matches (ValityAreg)) "</br>/n") ؛ // errmsg.add ("قالب البيانات الذي قمت باستيراده هو خطأ في التنسيق (Total" معلومات تهيئة الجدول** Author: ji le* date: 2013-12-2 1:43:04 PM* since: 1.0*/ public class sheetinfo {/ ** الخط الذي يقع فيه العنوان ، فإن سطر البداية هو 0 ، لا يحتاج إلى string ، / ** اسم الورقة التي تحتاج إلى قراءة* / القائمة العامة <string> sheetnists = new ArrayList <string> () ؛ this.sheetnames = sheetnames ؛ rowtitle) {this.rowtitle = rowtitle ؛ setSheetNames (قائمة <Tring> sheetnames) {this.sheetnames = sheetnames ؛ /* يجب أن يكون رقمًا*/غير فارغ (لا يمكن أن يكون رقمًا فارغًا "، regexpenum (نص سلسلة ، قيمة السلسلة) {this.text = text ؛ ProcessHtml (Hssfworkbook ، string html) NULL) ؛ 0 ؛ CreateHelper CH = WB.GetCreationHelper () ؛ elidx <line.getElementCount () ؛ log.Warn (E.GetMessage () ؛ attributeset as = fragment.getattributes () ؛ As.GetAttribute (attrib). HSSFFONT && wb مثيل HSSFWORK) font) .setColor (col.getIndex ()) ؛ GetMergeRegionRow (ورقة ، خلية الخلية) {// احصل على عدد الخلايا المدمجة هناك int sheetMergerCount = getTnummergedReagments () ؛ ca.getfirstcolumn () ؛ (cell.getRowIndex () == firster) {return lastr - firster ؛ 0 ؛ IF (COMPLENT> = FirstColumn && COMPLED <= LastColumn) {ROW FROW. REGRENT */ public static boolean ismergerregion (ورقة int ، int) {int skintergeCount = range.getlastcolumn () ؛ */ suppresswarnings ("غير مستخدم") suppressWarnings ("غير مستخدم") mergeregion private void (ورقة ، int firstrow ، int lastrow ، int firstcol ، int lastcol) getCellValue (خلية الخلية) {if (cell == null) return "" ؛ string.valueof (cell.getBooleanCellValue ()) ؛ {// تعاملان تنسيق وتنسيق الوقت subledateformat = new SimpleDateFormat ("yyyy-mm-dd") ؛ DD DATE (تم حلها عن طريق الحكم على معرف الخلية ، هي قيمة المعرف 3 1) string.valueof (sdf.format (date) ؛ str.place (string.valueof (char) 160). " System.out.println (New XSSfcolor (color.yellow) .getargbhex (). RGB [0] G = RGB [1] ، B = RGB [2] RFString = "B" ؛ 11) RSString = "B" ؛ / 16 ؛ = string.valueof (Green) ؛ ==) GSSTRING = "F" 13) BFString = "D" ؛ إذا كانت (extring) (١=) bsstring = "d" ؛ انظر إلى صفحة من. jsp مرة أخرى
<Body> <viv> <form id = "mainform" Action = "$ {ctx}/bom/ciscaseAction/$ {action}" method = "post" enctype = "multipart/form-data"> <type type = "file" name = "file"/> <a href = "$ {ctx} قالب </a> </form> </viv> <script type = "text/javaScript"> $ (function () {$ ('#mainform'). form ({onsubmit: function () {var isValid = $ (this) .form ('validate') ؛ return isvalid ؛ }}) ؛ </script> </body>الواجهة الرئيسية JSP
انسخ الرمز كما يلي: <a href = "javaScript (0)" rel = "خارجي nofollow" plain = "true" iconcls = "icon-standard-application-go" onClick = "ImportAction ()> import </a>
// استيراد دالة ImportActace () {d = $ ("#dlg"). مربع الحوار ({title: 'case import' ، width: 500 ، height: 500 ، href: '$ {ctx}/bom/ciscaseAction/evRextAction/' ، maximize: true ، modal: true ، buttons: [{text: 'expytr. }} ، {text: 'cancel' ، handler: function () {d.panel ('close') ؛ }تأثير النقر على الصفحة هو أن النقر على الاستيراد سيقفز إلى صفحة من. jsp
انظر إلى طبقة وحدة التحكم مرة أخرى
/ *** page page*/ @requestmapping (value = "importaction" ، method = requestMethod.get) السلسلة العامة eSportForm (نموذج النموذج) {model.addattribute ("Action" ، "Import") ؛ إرجاع "System/ciscaseActionimOportform" ؛ } / *** import* / @requestmapping (value = "import" ، method = requestMethod.post) Responsebody public string importform ( @requestparam ("file") multipartfile multipartfile ، model model) يلقي استثناء {ciscaseActionService.upload (multipartfile) ؛ إرجاع "النجاح" ؛ } طبقة الخدمة
/ *** حالة استيراد*/ suppressWarnings ({"RawTypes" ، "Uncheded"}) تحميل الفراغ العام (multipartfile multipartfile) يلقي الاستثناء {inputStream inputStream = multipartfile.getInputStream () ؛ exceltools exceltools = new Exceltools () ؛ exceltools.sheetInfo sheetInfo = excelt.new sheetinfo () ؛ sheetinfo.setRowtitle (0) ؛ أعمدة الخريطة = new hashmap () ؛ columns.put ("الأعمدة" ، سلسلة جديدة [] {"الاسم: اسم الحالة" ، "Vericatelaw: Break of Law" ، "Punishbasis: Punishbasis"}) ؛ sheetinfo.setColumnSmapping (الأعمدة) ؛ قائمة <hashmap <string ، string >> maplist = exceltools.getExcel (inputStream ، sheetInfo) ؛ لـ (int i = 0 ؛ i <maplist.size () ؛ i ++) {hashMap <string ، string> map = maplist.get (i) ؛ اسم السلسلة = map.get ("الاسم") ؛ if (stringUtils.isempty (name)) {رمي New BusinessException ("th" + (i + 2) + "لا يمكن أن يكون اسم الحالة فارغًا") ؛ } String evelationLaw = map.get ("Vericatelaw") ؛ String PunishingBasis = map.get ("punishbasis") ؛ ciscaseAction ciscaseAction = ciscaseAction جديد () ؛ ciscaseAction.setName (الاسم) ؛ CiscaseAction.setviolatelaw (Vericatelaw) ؛ ciscaseAction.setpunishbasis (Punishbasis) ؛ this.insert (ciscaseAction) ؛ // استدعاء طريقة الإدراج للطبقة نفسها}} ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.