1. Концепция введения
Apachepoi является библиотекой с открытым исходным кодом Apache Software Foundation. POI предоставляет API программы Java для чтения и написания архивов формата Microsoft Office.
2. Код, связанный с функцией
1. Описание среды: JDK1.7+Tomcat7+Spring
2. Конфигурация файла конфигурации
Добавить зависимости POI, необходимые в файле POM
<!-Добавить поддержку POI-> <Dependency> <groupId> org.apache.poi </GroupId> <straCactId> poi </artifactid> <sersive> 3.13 </version> </artifactid> <dehy orgid> org.apache.poi </GroupId> <ratifactId> poi-oo-oo-oo-oo-oo-oo-oo-oo-oo-oo-oo-oo-oo-oo-oo-oo-oo-oo-oo-oo-org.poi.
Загрузка файла настройки Spring-Mvc.xml
<bean id = "multiartresolver"> <!-Кодирование по умолчанию-> <name = "defaultencoding" value = "utf-8" /> <!-Максимальное значение размера файла-> <name = "maxuploadsize" value = "10485760000" /> <!-максимальное значение в память-> <свойство name = "maxinMemorySize" /> <!-максимальное значение в память-> <свойство name = "maxinMemorysize" /> <!-максимальное значение в память-> <свойство. </bean>
3. Связанные классы инструментов и написание кода
Класс инструментов excel
пакет com.jointem.hrm.utils; import org.apache.poi.hssf.usermodel.hssfworkbook; import org.apache.poi.ss.usermodel.cell; import org.apache.poi.ss.usermodel.row; import org.apache.poi.ss.usermodel; org.apache.poi.ss.usermodel.workbook; import org.apache.poi.ss.util.cellrangeaddress; import org.apache.poi.xssf.usermodel.xssfworkbook; import java.io.ioexcept java.text.simpledateformat; import java.util.arraylist; импорт java.util.list;/*** Создан Jenking на 2017/9/8. */public Class ImportExcelutil {Private Final Static String Excel2003L = ". XLS"; // 2003- Версия Excel Private Final Static String Excel2007U = ". XLSX"; // 2007+ версия Excel/** * Описание: Получить данные в потоке IO и собрать их в список <list >> Object * @param in, filename * @return * @Throws ioException */public list <list >> getBankListbyexcel (inputStream in, String filename) throws excection {list <object >> list = null; // Создать Excel Workbook Work = this.getWorkBook (in, имя файла); if (null == work) {бросить новое исключение («Создайте рабочий лист Excel как пустой!»); } Лист = null; Row Row = null; Клеточная клетка = null; list = new ArrayList <List <Object >> (); // спокойствие все листы в Excel для (int i = 0; i <work.getNumberOfSheets (); i ++) {sheate = work.getSheetat (i); if (sheet == null) {contine;} // спокойствие всех строк в текущей системе листа. for (int j = sheet.getfirstrownum (); j <= sheet.getLastrownum ()-11; j ++) {row = sheat.getrow (j); // if (row == null || row.getfirstcellnum () == j) // {// продолжение; //} // traverscellnum () == j) // нима for (int y = row.getfirstcellnum (); y <row.getlastcellnum (); y ++) {cell = row.getcell (y); if (this.ismergedregion (лист, j, y)) {li.add (this.getMergedRegionValue (лист, j, y)); } else {li.add (this.getCellValue (cell)); }} list.add (li); }} work.close (); вернуть список; } / **! String fileType = filename.substring (fileName.lastIndexof (".")); if (Excel2003L.Equals (fileType)) {wb = new HSSFWorkBook (instry); // 2003-} else if (Excel2007U.Equals (fileType)) {wb = new xssfworkbook (instry); // 2007+} else {бросить новое исключение («Проанализированный формат файла неверен!»); } вернуть WB; } / **! Decimalformat df = new DecimalFormat ("0"); // формат number string символ SimpleDateFormat sdf = new SimpleDateFormat ("yyy-mm-dd"); // формат даты DecimalFormat df2 = new DecimalFormat ("0"); // Переключение номера формата (cell.getCelltype ()) {case cell.cell_type_string: value = cell.getrichstringcellvalue (). GetString (); перерыв; case cell.cell_type_numeric: if ("general" .equals (cell.getcellstyle (). getDataFormatString ())) {value = df.format (cell.getNumericCellValue ()); } else if ("m/d/yy" .equals (cell.getCellStyle (). getDataFormatString ())) {value = sdf.format (cell.getDateCellValue ()); } else {value = df2.format (cell.getNumericCellValue ()); } перерыв; case cell.cell_type_boolean: value = cell.getBooleanCellValue (); перерыв; case cell.cell_type_blank: value = ""; перерыв; по умолчанию: перерыв; } return value; } / ** * Получить содержимое сменной ячейки * @param лист * @param row * @param column * @return * / public object getmergedregionValue (лист, int row, int column) {int sheatemergecount = sheet.getnummergedregions (); for (int i = 0; i <sheatemergecount; 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); Cell fcell = frow.getCell (FirstColumn); вернуть это. GetCellValue (fcell); }} return null; } / ** * Определите, является ли это сменной ячейкой * @param лист * @param row * @param column * @return * / public boolean ismergedregion (лист, int row, int column) {int sheatemergecount = sheet.getnummergedregions (); for (int i = 0; i <sheatemergecount; i ++) {cellrangaddress 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; }}} вернуть false; }} Контроллер запроса (страница процесса Excel Import)
пакет com.poiexcel.control; импортировать java.io.inputstream; Импорт java.io.printwriter; импортировать java.util.list; Импорт javax.servlet.http.httpservletrequest; Импорт javax.servlet.http.httpservletresponse; Import org.springframework.sterotype.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; Import com.poiexcel.util.importexcelutil; Импорт com.poiexcel.vo.infovo; @Controller @RequestMapping ("/uploAdexcel/ *") открытый класс uploadexcel (httpservletrequest) бросает исключение {multiparthttpservletrequest multipartrtequest = (MultiparThttpServLetRequest) запрос; InputStream in = null; Список <list <Object >> listOb = null; Multiplaartfile file = multipRtequest.getFile ("upFile"); if (file.isempty ()) {бросить новое исключение ("файл не существует!"); } in = file.getInputStream (); listOb = new importExcelutil (). getBankListByexcel (in, 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 ()+"name:"+vo.getName ()+"Time:"+vo.getDate ()+"Asset:"+vo.getMoney ()); } вернуть "результат"; } Фронт-элитный код
В фронт-конце используется компонент-компонент файла FileInput в Bootstrap, и вам необходимо представить fileInput.css, fileInput.js, zh.js, bootstrap.css, bootstrap.js, jquery.min.js
<body> <h4> Информация о посещаемости в запись </h4> <form method = "post" ectype = "multiply/form-data" id = "form1" action = "$ {pagecontext.request.contextpath}/withing/uploadexcel"> <input ud = "file- Zh" name = "upfile" type "=" file "> </cody> </cody> <//cody> <//cody> <//body> <//body> <//body> <//name" $ ('#file-Zh'). FileInput ({language: 'zh', uploadUrl: '$ {pagecontext.request.contextPath}/withing/uploadexcel', AldFileExtensions: ['xls', 'xlsx']}); </script> Объект VO, сохраните соответствующий объект данных Excel
пакет com.poiexcel.vo; // конвертировать каждую строку Excel в объект открытого класса Infovo {Private String Code; Приватное название строки; частная строка дата; частные струнные деньги; public String getCode () {return Code; } public void setCode (String Code) {this.code = code; } public String getName () {return name; } public void setName (string name) {this.name = name; } public String getDate () {дата возврата; } public void setDate (строка дата) {this.date = date; } public String getMoney () {return Money; } public void setMoney (String Money) {this.money = money; }}3. Эффект дисплея
1. Отображение страницы
2. Печать информация о бэкэнд
4. Резюме
Этот пример выводит только импортированные данные в консоли и не сохраняется. Если вы хотите настойчиво, просто позвоните в Service Layer в месте комментария
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.