В этой статье разделяется пакетный импорт данных таблицы 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.xssfcolor; Импорт org.apache.poi.xssf.usermodel.xssffont; Import org.apache.poi.xssf.usermodel.xssfworkbook; Импорт org.springframework.web.util.htmlutils; Импорт cn.vrview.dev.common.util.stringutil; открытый класс Exceltools { / ** log* / private Static Logger log = logmanager.getLogger (); /** * Export Excel * <p> * Использование: <br> * <code> list <map <string, object >> datalist = new ArrayList <map <string, object >> (); <br> * is = Exceltools.exportxls (datalist, новая строка [] {"createTime: date", "name:" Sex: gendist "," Примечание: raMED "); * </ code> * * @param collect * collection для экспорта * @param Header * Column для экспорта * @return inputstream return -stream */ public static inportxls (collection <map <string, object >> collect, string [] heder) {bytearrayOutputeReam out = new byTearRayOutputStream (); HSSFWorkBook Book = New HSSFWorkBook (); try {// добавить лист hssfsheet sheet = book.createsheet ("sheet1"); // Определите набор имен столбцов, которые будут экспортированы SET <String> Columns = new Hashset <String> (); // Установить цвет ячейки цвета HSSFCellStyle CellStyle = book.createCellStyle (); cellStyle.setFillPattern (hssfcellstyle.solid_foreground); cellStyle.SetFillForegroundColor (new hssfcolor.yellow (). getIndex ()); // генерировать заголовок hssfrow row = sheet.createrow (0); Hssfcell cell = row.createcell (0); cell.SetCellStyle (CellStyle); cell.SetCellValue («последовательность»); // номер столбца начинается с 1 int n = 1; // PANSE 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: collect) {hssfrow dataRow = sheet.createrow (i); // генерировать номер последовательности dataRow.createCell (0) .setCellValue (i); // Сгенерировать другие столбцы для (Строка столбца: Columns) {// Использовать запятые, чтобы получить имя поля, [0] - номер столбца, соответствующий заголовку заголовка. String columnName = column.split (",") [1]; // Сгенерировать номером последовательности Cell Cell = dataRow.createCell (integer.parseint (column.split (",") [0])); String value = ""; value = map.get (columnName) + ""; // конвертировать в "" if ("null" .equals (value)) {value = ""; } RichtextString richtextString = processhtml (book, value); cell.getCellStyle (). SetWrapText (false); cell.SetCellValue (RichtextString); } i ++; } book.write (out); out.close (); } catch (Exception e) {e.printstackTrace (); } вернуть новый BytearRayinputStream (out.tobytearray ()); } /** * Получить данные файла Excel <br> * Использование: <br> * листовинфейнфоинфо = new Exceltools (). New sheetInfo (); <br> * листовинфо.setRowTitle (0); Список <string> sheets = new ArrayList <string> (); <br> * string sheetName = "sheat1"; sheets.add (sheetname); <br> * sheetinfo.setsheetnames (листы); <br> * sheetinfo.setcolumnsmapping (новая строка [] {"prodname: имя продукта", * "prodspec: speciation", "CollectPrice: Price:" + {@link regexpenum} * regexpenum.notempty_isnumber, "PriceUnit: Unit", "CollectMarket: Quotation Market", "Prodlevel:" ylevlelvel: "? <br> * map <string, list> data = exceltools.getexcel (новый файл (path), листовина); * * @param * * @param sheetinfo * Информация об инициализации * @return Map {sheat1: list} * @Throws Exception * Exception */ @SuppressWarnings ("ravtypes") Общественная статическая карта getExcel (file f, листовинфейнфоинфо, String ExcelType) throws exception {return getexcel (new FileInputeR (f), листовая (f), листовая (f), листовая (f), листовая (f); } @Suppresswarnings ({"ravtypes", "unchecked"}) Общественная статическая карта getexcel (inputstream in, лист weethinfo, строка Exceltype). // Список карт экспрессии столбца <string> errmsg = new ArrayList <string> (); int errnum = 0; // Общее количество ошибок int errlimit = 10; // Ограничение количества проведений ошибок/ ** Используется для хранения всего содержимого, которое Excel считывает в соответствии с указанными правилами*/ map excelinfo = new hashmap (); Книга рабочей книги = null; try {if (exceltype.equals ("xls")) {book = new hssfworkbook (in); // бросить новое BusinessException («Excel версия слишком низкая, используйте версию 2007 или выше (расширение: XLSX)»); } else {book = new xssfworkbook (in); }} catch (OutofmemoryError e) {бросить новое runtimeexception («Текущий файл Excel слишком велик, пожалуйста, проверьте, есть ли недопустимые пустые данные в каждой таблице листов, включая данные строки и столбца с форматом и каркасом, удалите эти недопустимые данные! Обычный размер файла Excel [в пределах 1m]»); } // checkTitle (книга, листовина); // Получить количество рабочих листов int sheetnum = sheetinfo.getsheetnames (). Size (); // Описать все рабочие листы и прочитать данные внутри (int sheateIndex = 0; sheetIndex <sheateNum; sheetIndex ++) {// Получить текущий работник -объект строки листовины = htmlutils.htmlunescape (sheetInfo.getSheetNames (). Get (sheetIndex)); Map <string, string> validatemap = new HashMap <String, String> (); for (String mapstr: heathinfo.getColumnSmapping (). get (sheetName)) {string [] arr = mapstr.split (":"); columnsmap.put (arr [1], arr [0]); if (arr.length == 3) {// Если выражение проверки не пустое, добавьте его на карту в valistemap.put (arr [1], arr [2]); }} Лист листа = book.getsheet (листовая анома); if (null == лист) {бросить новое runtimeexception (string.format («Не удалось получить таблицу, пожалуйста, подтвердите, существует ли лист"%s "в Excel", лист)); } // Используется для хранения содержания данных в списке листа листа. // Получить количество строк в текущей таблице int rows = sheet.getLastrownum (); // Получить количество столбцов в текущей таблице int columns = sheet.getRow (sheetInfo.getRowTitle ()). GetLastCellnum (); if (rows <= heathinfo.getrowTitle ()) {// Если текущая таблица не имеет требуемых данных, продолжайте следующий цикл; } // Получить текущий список контента заголовка рабочего листа // цикл каждой ячейки в каждой строке и считывайте значение в строке ячейки titlerow = sheet.getRow (лист info.getrowTitle ()); for (int jj = 0; jj <columns; jj ++) {celltitle = titlerow.getcell (jj); if (celltitle! = null) {int row = celltitle.getroWindex (); int column = celltitle.getColumnIndex (); if (ismergedregion (лист, row, column)) {titlelist.add (getmergedregionValue (лист, row, column)); } else {titleList.Add (getCellValue (celltitle)); }} else {Throw New RuntimeException ("Ошибка чтения заголовка таблицы, в настоящее время установленная на" th " + (sheetInfo.getRowTitle () + 1) +" row <br/> Содержание заголовка таблицы: " + titlerow +", пожалуйста, проверьте, является ли это правильным. System.out.println (TitleList); (StringUtils.deletewhitespace (t). Equalsignorecase (colarr [1]) {include = true; Для (int i = листовидно. J <Columns; ColumnSmap.keyset ()) {if (stringUtils.deletewhitestepace (columntite) .Equalsignorecase (title)) {columnmaping = columnsmap.get (title); // Цвет фона ячейки if (Exceltype.equals ("xls")) {hssfcolor color = (hssfcolor) cellStyle.getFillForegroundColorColor (); Xssfcolor color = (xssfcolor) cellStyle.getFillForegraincolorcolor (); ячейка); +1); ColumnSmap.get (ColumnTite); eum.gettext (); value.trim () + "не совпадает! {// rowmap.put (Columnmaping, GetmergedRegyValue (лист, Row, Column)); (errmsg.size ()> 0) {if (errnum> errlimit) {errmsg.add («Шаблон данных, который вы импортировали, является слишком большой ошибкой формата (общая" + errnum + "elect } // if (true) Throw New Runtimeexception ("test"); String> (); ARR [0]); SheetInfo); ArrayList (); titlerow.getlastcellnum (); В следующий раз бросьте новое BusinessException («Формат файла неверен, пожалуйста, зайдите или загрузите шаблон»); titlelist.add (titlerow.getcell (jj) .getStringCellValue ()); (! TitleList.Contains (S.Split (":") [1])) {// errmsg.add ("'' + sheet.getSheetName () +" '' таблица '" + s // +"' 'Column не существует! ") ряд и чтение из строки под заголовком для (int i = sheetInfo.getRowTitle ()+1; i <= Rows; i ++) {map rowmap = new hashmap (); titlelist.get (j); valyatemap.get (columntite)) {// Проверьте регулярное выражение regexpenum eum = regexpenum.valueof (valyatemap .get (colunttle)); (value.matches (valiveAtereg)) {rowmap.put (columnmaping, value); "] </br>/n"); // errmsg.Add («Шаблон данных, который вы импортировали, является слишком большой ошибкой формата (общее значение« + errnum + », пожалуйста, проверьте, являются ли данные шаблона правильными!»); Информация об инициализации таблицы** @author: ji le* @date: 2013-12-2 1:43:04* @since: 1.0*/ public class sheetinfo {/ ** Линия, где расположена заголовок, стартовая строка-это 0, а не 1*/ private int rowtite = 1; Columnsmapping; } else {this.SheetNames = sheetNames; SetRowTitle (int rowtitle) {this.rowtitle = rowtitle; SheetNames; +$).+"),/** должно быть числом*/isnumber (" не может быть число "," // d*"),/** не пусто и число*/notempty_isnumber (" не может быть пустым и численным "," // d+");/** Текст*/private String Text; /* level*/private string vitued; public getText () {return Text; et -restrain; } private Regexpenum (строка текста, строка) {this.text = text; Processhtml (HSSFWorkBook WB, String HTML) {RichtextString RT = null; null); 0; ch = wb.getcreationhelper (); Line.GetElementCount (); // e.printstacktrace ();} return rt; Окончательное перечисление <?> ae = as.getattributeNames (); = (Color) f.get (as.getattribute (attrib)); wb) .getCustompalte (); (BOLD ». 0; CA.getlastrow (); @param лист * @param row * @param column * @return */ public Static String getmergedRegionValue (лист, int row, int column) {int sheatmercount = sheet.getnumergedredegions (); CA.getfirstcolumn (); FROW.GetCell (FirstColumn); Sheet.getnumergered (); (row> = firstrow && row <= lastrow) {if (column> = firstcolumn && column <= lastcolumn) {return true; Sheet.getNummergedRegions ()> 0? Lastcol) {sheate.addmergedregion (New CellRangeaddress (Firstrow, Lastrow, FirstCol, LastCol)); Cell.cell_type_string) {return cell.getStringCellValue (); cell.getCellformula (); cell.getDateCellValue (); SimpleDateformat ("yyyy-mm-dd"); cell.getCellStyle (); str.trim (); System.err.println (htmlutils.htmlunescape («Summary (TV & Box & Router)»); BSString, результат; rfstring = == 14 RSString = "E"; 12) if (rgreen == 12) gsstring = "c"; 16; Строка. = "F"; Посмотрите на страницу FARS.JSP
<body> <div> <form id = "mainform" action = "$ {ctx}/bom/ciscaseAction/$ {action}" method = "post" ectype = "multipr/form-data"> <input type = "file" name = "file"/> <a href = "$ {ctx}/static/case template. Шаблон </a> </form> </div> <script type = "text/javascript"> $ (function () {$ ('#mainform'). form ({onsubmit: function () {var isvalid = $ (this) .form ('valididate'); return isvalid; // return false to conment form wreats}, success (data (data); }}); </script> </body>Главный интерфейс JSP
Скопируйте код следующим образом: <a href = "javaScript (0)" rel = "enfullow nofollow" plain = "true" iconcls = "incon-standard-application-go" onclick = "importaction ()"> import </a>
// Импорт функции ImportAction () {d = $ ("#dlg"). Dialog ({title: 'Case Import', ширина: 500, высота: 500, href: '$ {ctx}/bom/ciscaseAction/importaction/', максимизируем: true, modal: true, кнопки: [{{{{{{{{{{womport: 'handler: function (). }}, {text: 'Cancel', Handler: function () {d.panel ('close'); }Эффект нажатия на страницу состоит в том, что нажимать на импорт перепрыгнет на страницу ward.jsp
Посмотрите на слой контроллера снова
/ *** Import Page*/ @RequestMapping (value = "importAction", method = requestMethod.get) public String Importform (Model Model) {model.addattribute ("action", "import"); вернуть "System/ciscaseactionImoportform"; } / *** import* / @Requestmaping (value = "import", method = requestMethod.post) @Responsebody public String importform (@RequestParam ("file") MultiplakFile, модель модели) THRES Exception {ciscAsectionService.upload (MutuletArtFile); вернуть "успех"; } Сервисный слой
/ *** Import Case*/ @suppresswarnings ({"rawtypes", "unchecked"}) public void upload (multiplakfile multipfile) бросает исключение {inputStream inputStream = multipArtFile.getInputStream (); Exceltools Exceltools = new Exceltools (); Exceltools.SheetInfo sheetInfo = exceltools.new sheetInfo (); sheetInfo.setRowTitle (0); Карта Columns = new HashMap (); columns.put ("columns", new String [] {"name: case name", "vilatelaw: Break of Law", "Punishbasis: punishbasis"}); sheetinfo.setcolumnsmapping (столбцы); Список <hashmap <string, string >> maplist = Exceltools.getExcel (inputStream, листовинфо); for (int i = 0; i <maplist.size (); i ++) {hashmap <string, string> map = maplist.get (i); String name = map.get ("name"); if (stringUtils.isempty (name)) {бросить новое BusinessException ("th" + (i + 2) + "Имя дела не может быть пустым"); } String biseationlaw = map.get ("vilatelaw"); String PrintsityBasis = map.get ("punishBasis"); Ciscaseaction ciscaseaction = new Ciscaseaction (); ciscaseaction.setname (имя); ciscaseaction.setviolatelaw (vilatelaw); ciscaseaction.setpunishbasis (punishbasis); this.insert (CiscaseAction); // вызов метода вставки того же слоя}} Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.