En aplicaciones prácticas, a menudo encuentra situaciones en las que Excel se carga o descarga, como importar datos, descargar estadísticas, etc. Para abordar este problema, escribí un ejemplo de descarga de carga simple basado en SpringMVC, donde el procesamiento de Excel utiliza el componente POI de Apache.
Las principales dependencias son las siguientes:
<Spendency> <MoupRoMID> Commons-io </groupid> <artifactid> commons-io </artifactid> <versión> 2.4 </versión> </pendency> <pendency> <proupId> commons-FileUpload </groupId> <artifactID> commons-FileUpload </artifactId> <PROPONSE> 1.3.1 </versión> </sele> <fependency> <MoupRid> org.springframework </groupid> <artifactid> spring-web </artifactid> <versión> 4.0.0.release </versión> </pendency> <ependency> <grupoID> org.springframework </groupId> <artifactid> spring-webmvc </artifactid> <version> 4.0.0.0.0. <Spendency> <MoupRoMID> org.apache.poi </groupid> <artifactId> poi </arfactid> <versión> 3.10.1 </versión> </pendency>
Categorías de procesamiento relacionadas:
(I) clase de controlador
paquete com.research.spring.controller; import java.io.ioException; import java.util.arrayList; import java.util.hashmap; import java.util.list; import java.util.map; importar org.apache.poi.hssf.usermodel.hssfworkbook; importar org.apache.poi.ss.usermodel.row; importar org.apache.poi.ss.usermodel.sheet; importar org.apache.poi.ss.usermodel.workbook; importar org.springframework.steretype.controller; importar org.springframework.web.bind.annotation.requestMapping; importar org.springframework.web.bind.annotation.requestparam; importar org.springframework.web.multipart.multipartfile; importar org.springframework.web.servlet.modelandview; import com.research.spring.model.userinfo; import com.research.spring.view.excelview; @Controller @RequestMapping ("/File") public class FileController {/** * Excel File Carga Processing * @param archivo * @return */@RequestMapping ("/upload") public modelandView uploadExcel (@requestparam ("file") múltiple archivo) {list <serve> list = newRheRloadlist <squestparam ("file") múltiple archivo) {list <serve <userfo> list = newRheRloadlist <squestParam ("file") múltiple archivo) {list <serve <sereurInfo> list = newArleadlist <squestparam ("file"); // Esto solo se procesa con archivos con nombres de archivos que incluyen "usuario", y la plantilla usa la plantilla de descarga if (file.getOriginalFileName (). Contiene ("usuario")) {try {Workbook wb = new HSSFWorkBook (file.getInputStream ()); Hoja de hoja = wb.getSheetat (0); for (int i = 1; i <= sheet.getLastrownum (); i ++) {fila fila = sheet.getrow (i); UserInfo info = new UserInfo (); info.setUsername (Row.getCell (0) .getStringCellValue ()); info.setPassword (Row.getCell (1) .getStringCellValue ()); list.add (información); }} catch (ioException e) {E.PrintStackTrace (); }} ModelandView mav = new ModelAndView ("Contenido"); mav.addoBject ("contenido", list.ToString ()); regresar mav; }/*** Procesamiento de descarga de archivos de Excel*/@RequestMapping ("/descargar") public ModelAndView DownloadExcel () {list <SererInfo> list = new ArrayList <SererInfo> (); UserInfo userInfo = new UserInfo (); userInfo.setPassword ("0000"); userInfo.setUsername ("SDFAS"); list.Add (UserInfo); list.Add (UserInfo); list.Add (UserInfo); list.Add (UserInfo); MAP <String, List <UserInfo>> MAP = new Hashmap <String, List <SererInfo>> (); map.put ("infolista", lista); Excelview ve = new Excelview (); devolver nuevo ModelAndView (VE, MAP); }}(Ii) clase de entidad
paquete com.research.spring.model; Public Class UserInfo {Private String UserName; contraseña de cadena privada; public String getUsername () {return UserName; } public void setUsername (String UserName) {this.Username = username; } public String getPassword () {return Password; } public void setPassword (String Password) {this.password = contraseña; } @Override public string toString () {return "userInfo [username =" + username + ", contraseña =" + contraseña + "]"; }}(Iii) Ver clase
Esta clase se usa al descargar, y al hacer páginas en primavera, utiliza una clase de vista personalizada para realizar un procesamiento relacionado con Excel.
paquete com.research.spring.view; import java.io.outputstream; import java.net.urlencoder; import java.util.list; import java.util.map; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; importar org.apache.poi.hssf.usermodel.hssfworkbook; importar org.apache.poi.ss.usermodel.cell; importar org.apache.poi.ss.usermodel.row; importar org.apache.poi.ss.usermodel.sheet; importar org.springframework.web.servlet.view.document.abstractExcelview; import com.research.spring.model.userinfo; / ** * Descargar Vista de Excel * * @author wdmcygah * */ public class Excelview extiende AbstractExcelView {@Override void buildExcelDocument (map <string, objeto> model, hssfworkbookbookbook, httpservletrequest solicitud, httpServletResponse Response) lanza excepción {@suPressRessWresswarnings ("" "" "" "". "" "" "." "" "". "" "" "." "" "". "" "" "." "" "". "" "" "." "" "". "" "" "." "" "". "" "" "." "" "". "" "" "." "" "". "" "" "." "" "". "" "" "." "" "". "" "" "." "" "". List <sererInfo> list = (list <sererInfo>) model.get ("infolist"); if (list! = null && list.size ()! = 0) {int len = list.size (); Hoja de hoja = Workbook.CreateSheet (); // La primera línea de texto Descripción fila fila = sheet.createrow (0); Celular = row.createCell (0, celular.cell_type_string); Cell.SetCellValue ("Nombre de usuario"); celular = Row.CreateCell (1, Cell.Cell_Type_String); Cell.SetCellValue ("Password"); // El siguiente es el contenido específico para (int i = 0; i <len; i ++) {row = sheet.createrow (i+1); celular = Row.CreateCell (0, Cell.Cell_Type_String); Cell.setCellValue (list.get (i) .getUsername ()); celular = Row.CreateCell (1, Cell.Cell_Type_String); Cell.SetCellValue (list.get (i) .getPassword ()); }} respuesta.setContentType ("Aplicación/vnd.ms-Excel"); respuesta.setcharacterEncoding ("UTF-8"); // El nombre del archivo se codifica aquí para garantizar que los caracteres chinos se muestren normalmente durante la cadena de descarga FileName = urlencoder.encode ("user.xls", "UTF-8"); // La propiedad de contenido-disposición se establece en descargar respuesta.setheader ("contenido-disposición", "adjunto; filename =" + nombre de archivo); OutputStream OS = Response.getOutputStream (); Workbook.Write (OS); OS.Flush (); os.close (); }}(Iv) Archivos de configuración principales
Al cargar archivos, debe configurar la clase MultiprArtResolver en el archivo de configuración. Después de la configuración, Spring pasará automáticamente el archivo a un objeto multiparto, y luego se puede realizar el procesamiento correspondiente. Por ejemplo, vea la clase del controlador.
<? xml versión = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" "" "" xmlns: p = "http://www.springframework.org/schema/p" xmlns: context = "http://www.springframework.org/schema/mvc" xmlns: util = "http://www.springframework.org/schema/Util" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/contextExt http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd "> <context: component-scan base-package =" com.research "/> <bean> <Property name =" ViewClass "value =" org.springframework.web.servlet.view.jstlview value = "/web-inf/"/> <propiedad name = "sufix" value = ". jsp"/> </bean> <!-Configuración de analizador de archivo de archivo-> <bean id = "multiparthesolver"> <propiedad name = "defaultIning" value = "utf-8"> </propiedad> <!-Límite de tamaño de archivo de carga, la unidad es bytes-> <propiedad de propiedad = "maxplotensor value = "5242880000000"> </property> <!-ruta temporal para cargar el archivo, se eliminará automáticamente después de cargar-> <Property Name = "uploadTempDir" value = "upload/temp"> </property> </beans> </beans>
(V) Página de prueba
<html> <fead> <meta http-equiv = "content-type" content = "text/html; charset = utf-8"/> </head> <body> <h3> prueba la función de descarga de Excel </ h3> <formul Excel "> </input> </form> <h3> prueba la función de sobrecarga de Excel </h3> <form de acción =" file/upload.htm "enctype =" multipart/formy-data "método =" post "> <input type =" file "name =" file "> </input> <input type =" enviar "valor =" cargar excel "> </input> </formy> </body> </html.
Si desea ver el código fuente completo, puede verificarlo en mi repositorio de GitHub. Entre ellos, cargar archivos solo procesa archivos que cumplen con la plantilla de descarga. Para procesar otros archivos, debe implementarlo usted mismo. La prueba de código pasó sin error.
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.