1. Introducción al concepto
Apachepoi es una biblioteca de código abierto de Apache Software Foundation. POI proporciona API a los programas Java para leer y escribir Archivos de formato de Microsoft Office.
2. Código relacionado con la función
1. Descripción del entorno: JDK1.7+Tomcat7+Spring
2. Configuración del archivo Configuración
Agregar dependencias de POI requeridas en el archivo POM
<
Spring-MVC.XML Configuración del archivo de configuración
<bean id = "multipartResolver"> <!-Encoding predeterminado-> <propiedad name = "defaultEncoding" valor = "utf-8" /> <!-valor máximo de tamaño de archivo-> <name de propiedad = "maxuploadsize" value = "10485760000" /> <!-valor máximo en memoria-> <name de propiedad = "maxinMemorySize" valor "valor =" 40960 "
3. Clases de herramientas relacionadas y escritura de código
Clase de herramienta de análisis de Excel (importexcelUtil.java)
paquete com.jointem.hrm.utils; import org.apache.poi.hssf.usermodel.hssfworkbook; import org.apache.poi.ss.usermodel.cell; importar org.apache.poi.ss.usermodel.row; import org.apache.ss.ss.usermodel.heheet; import org.apache.poi.ss.usermodel.workbook; import org.apache.poi.ss.util.cellrangaaddress; importar org.apache.poi.xssf.usermodel.xssfworkbook; import java.io.ioxception; import java.io.inputstream; import java.decimalformat; importar; importación; java.text.simpledateFormat; import java.util.arrayList; import java.util.list;/*** creado por Jenking el 2017/9/8. */public class ImportExcelUtil {String estático final privado Excel2003l = ". XLS"; // 2003- Versión de Excel Private String Static String Excel2007u = ". XLSX"; // 2007+ Versión de Excel/** * Descripción: Obtenga los datos en la transmisión IO y ensamblándolos en una lista <List <ject>> Object * @param in, FileName * @return * @throws ioexception */public List <List <S Object>> GetBankListByExcel (InputStream in, String FileName) lanza excepción {Lista de lista <s Object>> List = Null; // Crea Excel Workbook Work = this.getWorkBook (en, nombre de archivo); if (null == work) {tire nueva excepción ("Crea Excel Worksheet como vacía!"); } Hoja = nulo; Fila fila = nulo; Célula celular = nulo; list = new ArrayList <List <Spect>> (); // Tranquilidad Todas las hojas en Excel para (int i = 0; i <work.getNumberOfSheets (); i ++) {sheet = work.getSheetat (i); if (sheet == null) {continuar;} // Tranquility Todas las filas en la hoja actual System.out.println (sheet.getLastrownum ()); for (int j = sheet.getFirStowNum (); j <= sheet.getLastRownum ()-11; j ++) {row = sheet.getRow (j); // if (fila == null || fila.getFirstCellNum () == j) // {// continúa; //} // Traverse todas las columnas LISTA <Object> li = new ARSAYLISTIST <) () () () (); for (int y = row.getFirstCellnum (); y <row.getLastCellNum (); y ++) {celular = row.getCell (y); if (this.IsMergedRregion (shita, j, y)) {li.add (this.getMergedRregionValue (hoja, j, y)); } else {li.add (this.getCellValue (celular)); }} list.add (li); }} work.close (); lista de devolución; } / ** * Descripción: Según el sufijo de archivo, la versión del archivo se cargó adaptivamente * @param Instr, nombre de archivo * @return * @throws Exception * / public Workbook GetWorkbook (InputStream Instr, String FileName) lanza la excepción {Workbook wb = null; Cadena fileType = filename.substring (filename.lastIndexof (".")); if (Excel2003l.equals (fileType)) {wb = new hssfworkbook (instr); // 2003-} else if (Excel2007u.equals (fileType)) {wb = new xssfworkbook (instr); // 2007+} else {tirar nueva excepción ("¡El formato de archivo analizado es incorrecto!"); } return wb; } / ** * Descripción: Formatear los valores en la tabla * @param celda * @return * / public object getCellValue (celular) {valor de objeto = null; DecimalFormat df = new DecimalFormat ("0"); // Formato Número de cadena Caracter SimpleDateFormat sdf = new SimpleDateFormat ("yyy-mm-dd"); // Formato de fecha decimalFormat df2 = new DecimalFormat ("0"); // Switch de número de formato (Cell.getCellType ()) {Case Cell.Cell_Type_String: Value = Cell.getRichStringCellValue (). GetString (); romper; Case Cell.Cell_Type_Numeric: if ("General" .Equals (Cell.getCellStyle (). GetDataFormAtString ())) {valor = df.format (Cell.getNumericCellValue ()); } else if ("m/d/yy" .equals (cell.getCellStyle (). getDataFormatString ())) {value = sdf.format (cell.getDateCellValue ()); } else {value = df2.format (cell.getNumericCellValue ()); } romper; case cell.cell_type_boolean: value = cell.getBooleanCellValue (); romper; case cell.cell_type_blank: value = ""; romper; predeterminado: ruptura; } valor de retorno; } / ** * Obtenga el contenido de la celda fusionada * @param sheet * @param fila * @param columna * @return * / public object GetMergedRegionValue (Hoja de hoja, int row, int columna) {int SheetMerGeCount = sheet.getNummergedRegedRegions (); for (int i = 0; i <sheetMerGecount; i ++) {cellRanGeaddress ca = sheet.getMergedRregion (i); int FirstColumn = ca.getFirstColumn (); int LastColumn = ca.getLastColumn (); int firstrow = ca.getFirStrow (); int lastrow = ca.getLastrow (); if (fila> = firstrow && row <= lastraw) {if (columna> = firstColumn && column <= lastColumn) {row frow = sheet.getrow (firstrow); Celda fcell = frow.getcell (FirstColumn); devolver esto.getCellValue (fcell); }} return null; } / ** * Determine si se trata de una celda fusionada * @param Sheet * @param fila * @param columna * @return * / public boolean ismergedRregion (hoja de hoja, int row, int columna) {int sheetMerGeCount = sheet.getNummergedRegedRegeds (); for (int i = 0; i <sheetMerGecount; i ++) {cellRanGeadDress range = shead.getMergedRregion (i); int FirstColumn = Range.getFirstColumn (); int LastColumn = Range.getLastColumn (); int firstrow = range.getFirStrow (); int lastrow = range.getLastrow (); if (Row> = FirStrow && Row <= LASTROW) {if (columna> = FirstColumn && Column <= LastColumn) {return true; }}} return false; }} Controlador de solicitud (solicitud de importación de Excel de la página de proceso)
paquete com.poiexcel.control; import java.io.inputstream; import java.io.printwriter; import java.util.list; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; importar org.springframework.stereotype.controller; importar org.springframework.web.bind.annotation.requestMapping; importar org.springframework.web.bind.annotation.requestmethod; importar org.springframework.web.bind.annotation.ResponseBody; importar org.springframework.web.multipart.multipartfile; importar org.springframework.web.multipart.multiparthttpservletRequest; import com.poiexcel.util.importexcelutil; import com.poiexcel.vo.infovo; @Controller @RequestMapping ("/uploadExcel/ *") public class UploadExcelControl {/** * Descripción: Importar archivo Excel a través de la envío de formulario tradicional * @param request * @throws excepción */@RequestMapping (valor = "upload.do", método = {requestmethod.get, requestmethod Solicitud) lanza la excepción {multiparthttpservletRequest multipertecequest = (multipThttpServletRequest) solicitud; InputStream in = null; List <List <Sect>> listob = null; Archivo multipartFile = multiparTruCest.getFile ("UpFile"); if (file.isempty ()) {throw new Exception ("File no existe!"); } in = file.getInputStream (); listob = new ImportExcelUtil (). GetBankListByExcel (in, file.getOriginalFileName ()); cercar(); // El método de servicio correspondiente se puede llamar aquí para guardar los datos en la base de datos. Ahora solo los datos se emiten para (int i = 0; i <listob.size (); i ++) {list <sect> 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 ("Información de impresión-> Institución:"+Vo.getCode ()+"Nombre:"+Vo.getName ()+"Time:"+Vo.getDate ()+"Asset:"+Vo.getMoney ()); } return "resultado"; } Código frontal
El front-end utiliza el componente de carga de archivo FileInput de Bootstrap, y necesita introducir fileInput.css, fileinput.js, zh.js, bootstrap.css, bootstrap.js, jquery.min.js
<body> <h4> Entrada de información de asistencia </h4> <form de método = "post" enctype = "multipart/form-data" id = "form1" action = "$ {pageContext.request.contextPath}/asistente/uploadexcel"> <input id = "file-zh" name = "upfile" type = "file"> </</body> </body> $ ('#file-zh'). FileInput ({lenguaje: 'zh', uploadUrl: '$ {pageContext.request.contextPath}/asistencia/uploadexcel', permitidofilextensions: ['xls', 'xlsx']}); </script> Objeto VO, guarde el objeto correspondiente de los datos de Excel
paquete com.poiexcel.vo; // Convierta cada fila de Excel en un objeto Public Class Infovo {private String Code; nombre de cadena privada; fecha de cadena privada; dinero de cadena privada; public String getCode () {código de retorno; } public void setCode (código de cadena) {this.code = code; } public String getName () {nombre de retorno; } public void setName (nombre de cadena) {this.name = name; } public String getDate () {Fecha de retorno; } public void setDate (fecha de cadena) {this.date = date; } public String getMoney () {return Money; } public void setMoney (String Money) {this.money = Money; }}3. Muestra de efecto
1. Pantalla de página
2. Imprimir información de backend
4. Resumen
Este ejemplo solo genera los datos importados en la consola y no persiste. Si desea persistir, simplemente llame a la capa de servicio en la ubicación de los comentarios
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.