Costumo encontrar a necessidade de importar e exportar o Excel no trabalho. Tenho um breve exemplo de resposta para compartilhar com você.
Não diga muita bobagem,
1. Pacote de jar exigido:
2. Código front-end:
ieport.jsp:
<%@página import = "java.util.date"%> <%@página linguagem = "java" contentType = "text/html; charset = utf-" PageEncoding = "utf-"%> <! "http://www.w.org/tr/xhtml/dtd/xhtml-transitional.dtd"> <html xmlns = "http://www.w.org//xhtml"> <Head> <meta http-equiv-Entcents- " /> <title> página de importação/exportação </itit> <script type = "text/javascript"> function exportfile () {window.location.href = "<%= request.getContextPath ()%>/export.go"; } </script> </ad Head> <body> <formulário de forma = "import.go" method = "post" Enctype = "Multipart/form-data"> arquivo: <input type = "file" name = "uploadfile"/> <br> </br> <bump type = "submit" e "importação"/> <input> "" </body> </html>succcess.jsp:
<%@ página de página = "java" contentType = "text/html; charset = utf-" pageEncoding = "utf-"%> <%@ taglib prefix = "c" uri = "http://java.sun.com/jstl/core"/! Transitional//EN" "http://www.w.org/TR/xhtml/DTD/xhtml-transitional.dtd"> <html xmlns="http://www.w.org//xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset = utf- "/> <title> Página de sucesso </title> <script type =" text/javascript "> // var secUserList = '$ {secuserList}'; // alerta (secuserList); </script> </ad Head> <body> <c: if test = "$ {type == 'import'}"> <div> importar com sucesso! </div> <c: foreach itens = "$ {secuserList}" var = "secuser"> <div> id: $ {secuser.userId} | name: $ {secuser.username} | senha: $ {secuser.user.password} </div> </c: para cada </c: if> <div> Exportar com sucesso! </div> </c: se> </body> </html>3. Código de fundo:
controlador:
pacote com.Controller; importar java.io.file; importar java.util.list; importar javax.annotation.resource; importar javax.servlet.http.httpServletRequest; importar javax.servlet.http.httpServletResponse; importar org.springframework.tereotype.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; importação com.Domain.Secuser; importação com.service.ieportService; @Controller Public Class ieportController {@Resource Private ieportService IoportService; @RequestMapping ("/import") public ModelAndView ImportFile (@RequestParam (value = "UPLOPFILE") MultipartFile MFILE, httpServletReQuest Solicy, httpServletResponse resposta) {strot rootpath = request.getSession (). GetServletContext (). List <Secuser> secuserList = ieportService.importFile (mfile, rootpath); ModelAndView MV = new ModelAndView (); mv.addObject ("tipo", "importação"); mv.addObject ("secuserList", secuserList); mv.setViewName ("/Success"); retornar MV; } @RequestMapping ("/export") public ModelAndView ExportFile (httpServletResponse resposta) {ieportService.exportFile (resposta); ModelAndView MV = new ModelAndView (); mv.addObject ("type", "export"); mv.setViewName ("/Success"); retornar MV; }} serviço:
pacote com.service; importar java.io.file; importar java.io.fileInputStream; importar java.io.inputStream; importar java.io.OutputStream; importar java.net.urlencoder; importar java.text.simpledateFormat; importar java.util.arraylist; importar java.util.date; importar java.util.list; importar javax.annotation.resource; importar javax.servlet.http.httpServletResponse; importar org.apache.poi.hssf.usermodel.hssfrow; importar org.apache.poi.hssf.usermodel.hssfsheet; importar org.apache.poi.hssf.usermodel.hssfworkbook; importar org.apache.poi.ss.usermodel.cellstyle; importar org.apache.poi.ss.usermodel.font; importar org.apache.poi.xssf.usermodel.xssfcell; importar org.apache.poi.xssf.usermodel.xssffont; importar org.apache.poi.xssf.usermodel.xssfrow; importar org.apache.poi.xssf.usermodel.xssfsheet; importar org.apache.poi.xssf.usermodel.xssfworkbook; importar org.springframework.tereotype.service; importar org.springframework.web.multipart.multipartFile; importação com.dao.ieportdao; importação com.Domain.Secuser; @Service Public Class ieportService {@Resource Private ieportdao ieportdao; Lista pública <SecUser> ImportFile (MultipartFile Mfile, String rootpath) {list <Secuser> secuserList = new ArrayList <Secuser> (); String filename = mfile.getoriginalfilename (); String sufix = filename.substring (filename.lastIndexOf (".") +, Filename.length ()); String ym = new SimpleDateFormat ("yyyy-mm"). Formato (new date ()); String filepath = "uploadfile/" + ym + filename; tente {arquivo file = novo arquivo (rootpath + filepath); if (file.exists ()) {file.delete (); file.mkdirs (); } else {file.mkdirs (); } mfile.transferto (arquivo); if ("xls" .equals (sufixo) || "xls" .equals (sufixo)) {secuserList = importXls (arquivo); ieportdao.importFile (secuserList); } else if ("xlsx" .equals (sufixo) || "xlsx" .equals (sufixo)) {secuserList = importXlsx (file); ieportdao.importFile (secuserList); }} catch (Exceção e) {e.printStackTrace (); } retornar secuserList; } Lista privada <SecUser> importXls (arquivo de arquivo) {list <Secuser> secuserList = new ArrayList <SecUser> (); InputStream é = nulo; HSSFWorkbook hWorkbook = null; tente {is = new FileInputStream (arquivo); HWORKBOOK = novo HSSFWorkbook (IS); Hssfsheet hsheet = hworkbook.getSheetat (); if (null! = hsheet) {for (int i =; i <hsheet.getphysicalNumberOfRows (); i ++) {secuser su = new secuser (); Hssfrow hrow = hsheet.getRow (i); su.setUsername (hrow.getCell (). tostring ()); su.setUserPassword (hrow.getCell (). tostring ()); secuserList.add (SU); }}} catch (Exceção e) {e.printStackTrace (); } finalmente {if (null! = is) {try {is.close (); } catch (Exceção e) {e.printStackTrace (); }} if (null! = hWorkbook) {tente {hworkbook.close (); } catch (Exceção e) {e.printStackTrace (); }}} retornar secuserList; } Lista privada <SecUser> importXlsx (arquivo de arquivo) {list <SecUser> secuserList = new ArrayList <SecUser> (); InputStream é = nulo; XSSFWorkbook xWorkbook = null; tente {is = new FileInputStream (arquivo); XWorkbook = novo XSSFWorkbook (IS); Xssfsheet xsheet = xworkbook.getSheetat (); if (null! = xSheet) {for (int i =; i <xsheet.getphysicalNumberOfRows (); i ++) {secuser su = new secuser (); Xssfrow xrow = xsheet.getRow (i); su.setUsername (xrow.getCell (). tostring ()); su.setUserPassword (xrow.getCell (). tostring ()); secuserList.add (SU); }} catch (Exceção e) {e.printStackTrace (); } finalmente {if (null! = is) {try {is.close (); } catch (Exceção e) {e.printStackTrace (); }} if (null! = xworkbook) {try {xworkbook.close (); } catch (Exceção e) {e.printStackTrace (); }}} retornar secuserList; } public void exportfile (httpServletResponse resposta) {simledateFormat df = new SimpleDateFormat ("yyyymmdd"); OutputStream OS = NULL; XSSFWorkbook xWorkbook = null; tente {string filename = "user" + df.format (new Date ()) + ".xlsx"; OS = Response.getOutputStream (); Response.Reset (); Response.setheader ("Content-Disposition", "Applement; filename =" + urlencoder.encode (nome do arquivo, "utf-")); Response.setContentType ("Application/Octet-Streem"); xWorkbook = new XSSFWorkbook (); Xssfsheet xsheet = xworkbook.createSheet ("userList"); // Defina o cabeçalho da página da folha setSheetheader (XWorkbook, Xsheet); // Definir a página do conteúdo do conteúdo do conjunto de conteúdo (XWorkbook, Xsheet); XWorkbook.Write (OS); } catch (Exceção e) {e.printStackTrace (); } finalmente {if (null! = os) {tente {os.close (); } catch (Exceção e) {e.printStackTrace (); }} if (null! = xworkbook) {try {xworkbook.close (); } catch (Exceção e) {e.printStackTrace (); }}}}} / ** * Defina o cabeçalho da página da folha * @param xWorkbook * @param xSheet * / private void setSheetheader (xssfworkbook xworkbook, xssfsheet xsheet) {xsheet.setColumnwidth ( *); xsheet.setColumnWidth (, *); xsheet.setColumnWidth (, *); CellStyle CS = XWorkbook.CreateCellStyle (); // Definir Centreamento Horizontal e Vertical CS.SetalIignment (CellStyle.align_center); cs.setverticalalignment (CellStyle.vertical_center); // Definir font headerfont = xworkbook.createFont (); headerfont.setFoTheightInPoints ((curta)); headerfont.setBoldweight (xssffont.Boldweight_bold); headerfont.setFontName ("安体"); cs.setFont (Headefont); cs.setWrapText (true); // é possível embrulhar a linha automaticamente xssfrow xrow = xsheet.crerowerow (); XSSFCell xCell = xrow.createCell (); xcell.setCellStyle (CS); xcell.setCellValue ("ID do usuário"); XSSFCell xCell = xrow.createCell (); xcell.setCellStyle (CS); xcell.setCellValue ("Nome do usuário"); XSSFCell xCell = xrow.createCell (); xcell.setCellStyle (CS); xcell.setCellValue ("Senha"); } / ** * Defina o conteúdo da página da folha * @param xWorkbook * @param xsheet * / private void setsheetContent (xssfworkbook xworkbook, xssfsheet xSheet) {list <SecUser> secuserList = ieportdao.getSecuseserlist (); CellStyle CS = XWorkbook.CreateCellStyle (); cs.setWrapText (true); if (null! = secuserList && secuserList.size ()>) {for (int i =; i <secuserList.size (); i ++) {xssfrow xrow = xsheet.crotrowow (i+); Secuser secuser = secuserList.get (i); for (int j =; j <; j ++) {xssfcell xcell = xrow.createCell (j); xcell.setCellStyle (CS); switch (j) {case: xcell.setCellValue (secuser.getUserID ()); quebrar; Caso: xcell.setCellValue (secuser.getUserName ()); quebrar; Caso: xcell.setCellValue (secuser.getUserpassword ()); quebrar; Padrão: quebra; }}}}}}Dao:
pacote com.dao; importar java.sql.resultset; importar java.sql.sqLexception; importar java.util.arraylist; importar java.util.list; importar javax.annotation.resource; importar org.springframework.tereotype.repository; importação com.Domain.Secuser; importar org.springframework.jdbc.core.jdbctemplate; importar org.springframework.jdbc.core.rowmapper; @Repository Public Class ieportdao {@Resource Private JDBCTemplate JDBCTemplate; Private Rowmapper <SecUser> Surowmapper = NULL; private ieportdao () {Surowmapper = new Rowmapper <SecUser> () {@Override public Secuser MapRow (ResultSet RS, Int Index) lança sqLexception {secuser secuser = new secuser (); secuser.setUserID (rs.getString ("user_id")); secuser.setUserName (rs.getString ("user_name")); secuser.setUserpassword (rs.getString ("user_password")); retornar secuser; }}; } public void ImportFile (List <Secuser> secuserList) {try {string sql = "inserir em valores sec_user (uuid (),?,?)"; List <object []> paramslist = new ArrayList <object []> (); for (int i =; i <secuserList.size (); i ++) {secuser secuser = secuserList.get (i); Objeto [] params = new Object [] {secuser.getUserName (), secuser.getUserpassword ()}; paramslist.add (params); } jdbctemplate.batchupdate (sql, paramslist); } catch (Exceção e) {e.printStackTrace (); }} Lista pública <SecUser> getSecUserList () {list <Secuser> sulist = new ArrayList <SecUser> (); StringBuffer sb = new StringBuffer (); sb.append ("Selecione su.user_id, su.user_name, su.user_password de sec_user su"); tente {sulist = jdbctemplate.Query (sb.toString (), surowmapper); } catch (Exceção e) {e.printStackTrace (); } retornar sulista; }}domínio:
pacote com.Domain; classe pública secuser {string userID; // Nome de usuário da string de identificação do usuário; // nome de usuário string userpasspord; // senha public string getUserId () {return userID; } public void setUserID (string userId) {this.UserID = userID; } public string getUserpassword () {return userpassword; } public void setUserPassword (string userpassword) {this.UserPassword = userPassword; } public string getUserName () {return userName; } public void setUserName (string userName) {this.username = nome de usuário; }}4. Arquivo de configuração:
<? xml versão = "." coding = "utf-"?> <web-app xmlns: xsi = "http://www.w.org//xmlschema-innstance" xmlns = "http://java.sun.com/xmls/javaeeeee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app__.xsd" id="WebApp_ID" version="."> <lame-name> springspringmvcpoi </liber-name> <lorde-file-list> <lorde-file> ieport.jsp </limk-File> </list-fil-list> <!-Especifique o nome e a localização do arquivo de configuração da mola-> <Context-param> <amam-name> contextconfiglocation </param-name> ClassPath: DataSource-Context.xml </param-value> </context-param> <!-Configure o ouvinte-> <Ilvier> <Listenciador-class> org.springframework.web.context.contextloaderListener </lister-class> </vier> <!-Config SpringMer </servlet-name> DispatcheserServlet </servlet-name> <Servlet-class> org.springframework.web.servlet.dispatcherServlet </servlet-class> <!-Configure Springmvc Localização do arquivo de configuração do springmvc-> init-param> <a Param-name> ContextConfigLocation </param-name> <amam-value> ClassPath: spring-mvc.xml </param-value> </irit-param> </servlet> <Servlet-mapping> <Verlet-name> despachoServlet </servlet-name> <!-tattern>*. <Filter-Name> caracterencodingfilter </filter-name> <filter-Class> org.springframework.web.filter.characterencodingFilter </filter-class> <iit-param> <amam-name> Encoding </param-name> <ama Param> utf-</param-name> </ingress-s-rotação </param-name> <amaMalue> utf-</param-value> </ingress> </ingress-s-rotação </param-name> <ama Param> utf-</param-name> <Filter-Name> CaracterEncodingFilter </filter-Name> <url-Pattern>/*</url-tattern> </filter-Mapping> </web-app>
<? xml versão = "." coding = "utf-"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w.org//xmlschema-sstance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="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-..xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-..xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc- ... http://www.springframework.org/schema/aop/spring-aop-..xsd"> <!-- Configure automatic scanning packages --> <context:component-scan base-package="com.controller"></context:component-scan> <!-- Configure SpringMVC's view resolver --> <bean> <property name="prefix" value = "/web-inf/views/"> </property> <propriedade name = "suffix" value = ".
<? xml versão = "." coding = "utf-"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w.org//xmlschema-sstance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-..xsd http://www.springframework.org/schema/Context http://www.springframework.org/schema/Context/spring-context-..xsd "> <Contexto: componente -can-cackage =" com "> </context: componente: componente"> Component-Can/backage = "com"> </context:
<? xml versão = "." coding = "utf-"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w.org//xmlschema-sstance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/Context http://www.springframework.org/schema/Context/spring-context.xsd "> <!-leia jdbc configuration file-> <Context-Prowhergroumbergrather Latchsd"> <! Data Source-> <bean id = "DataSource" Destroy-Method = "Close"> <propriedade name = "user" value = "$ {jdbc.user}"> </propriedade> <names name = "senha" value = "$ {jdbc.password}"> </propriedade> <names (driver} name = "jdbcurl" value = "$ {jdbc.jdbcurl}"> </propriedade> <!-Quando as conexões no pool de conexões são usadas, o número de novas conexões criadas em um momento por cp-> <names name = "a adquirir" valuever = "> </propriedade> <!-o número de conexões criadas durante o número" name = "InitialPoolSize" value = ""> </propriedade> <propriedade name = "maxpoolsize" value = ""> </propriedade> <propriedade name = "minpoolsize" value = ""> </property> <propriedades name = "maxconnectionage" value = "> </imobiliário <names> value = "" "> </propriedade> <propriedade name =" testConnectionOncheckout "value =" false "> </property> <propriedades name =" testConnectionOncheckin "value =" false "> </propriedade> <!-Verifique as conexões ociosas no pool de conexões a cada segundo-> <nome da propriedade" Nome da propriedade "Testeriod ""> ">"> "> value = ""> </propriedade> <propriedade name = "adquirreretryDelay" value = ""> </erouse> <propriedade name = "preferredTestQuery" value = "selecione From Dual"> </Property> </satean> <!-Configure JDBC modelo jdbctemplate-> <ban-d = "JDBCTemplate" REF = "DataSource"> </construtor-arg> </shean> </ Beans>jdbc.driverclass = com.mysql.jdbc.driver jdbc.jdbcurl = jdbc: mysql: // localhost:/mydb jdbc.user = myuser jdbc.password = myuser
5. Estrutura do diretório:
6. Demonstração de resultados
Importar:
Exportar:
PS:
1. Este novato, como ela ainda não sabia como adicionar anexos, ela publica todo o código e adiciona a estrutura do diretório. Ela aprenderá a adicionar anexos no futuro e depois modificar -os.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.