Em aplicações práticas, você geralmente encontra situações em que o Excel é carregado ou baixado, como importar dados, baixar estatísticas, etc. Para resolver esse problema, escrevi um exemplo simples de download de upload com base no SpringMVC, onde o processamento do Excel usa o componente POI da Apache.
As principais dependências são as seguintes:
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <dependency> <GroupID> org.springframework </frugiD> <stifactId> spring-web </starfactId> <versão> 4.0.0.release </sipers> </dependency> <pendency> <puperId> org.springframework </groupid> <Artifactid> spring-weBmvc </artefactIrwork </siERSSPRINGIDEM> <Depencency> <GrupidId> org.apache.poi </foupiD> <TRAFACTID> poi </stifactId> <versão> 3.10.1 </versão> </dependency>
Categorias de processamento relacionadas:
(I) Classe do controlador
pacote com.research.spring.controller; importar java.io.ioException; importar java.util.arraylist; importar java.util.hashmap; importar java.util.list; importar 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") Classe public FileController {/** * Excel File upload Processamento * @Param File * @return */@requestMapping ("/upload") publicAndView uploadexcel (@ReQuestParam ("FILE") FILETFILE) // Isso é processado apenas com arquivos com nomes de arquivos, incluindo "Usuário", e o modelo usa o modelo de download se (file.getoriginalfileName (). Folha de folha = wb.getSheetat (0); for (int i = 1; i <= sheet.getLastrownum (); i ++) {linha linha = sheet.getRow (i); UserInfo info = new userInfo (); info.setUserName (row.getCell (0) .getStringCellValue ()); info.setPassword (row.getCell (1) .getStringCellValue ()); list.add (info); }} catch (ioexception e) {e.printStackTrace (); }} ModelAndView MAV = new ModelAndView ("Content"); mav.addObject ("content", list.toString ()); retornar mav; }/*** Processamento do download do arquivo do Excel*/@RequestMapping ("/Download") public ModelAndView Downloadexcel () {List <UserInfo> List = new ArrayList <VeriSinfo> (); UserInfo userInfo = new Userinfo (); userInfo.setPassword ("0000"); userInfo.setUserName ("sdfas"); list.add (userInfo); list.add (userInfo); list.add (userInfo); list.add (userInfo); Mapa <string, list <userInfo>> map = new hashmap <string, list <userInfo>> (); map.put ("Infolist", lista); ExcelView VE = new ExcelView (); retornar novo ModelAndView (VE, mapa); }}(Ii) Classe de entidade
pacote com.research.spring.model; classe pública userInfo {private string nome de usuário; senha de sequência privada; public String getUserName () {return Username; } public void setUserName (string userName) {this.username = nome de usuário; } public string getPassword () {return senha; } public void setPassword (string senha) {this.password = senha; } @Override public string tostring () {return "userInfo [userName =" + nome de usuário + ", senha =" + senha + "]"; }}(Iii) Ver classe
Esta classe é usada ao baixar e, ao renderizar páginas na primavera, você usa uma classe de exibição personalizada para executar o processamento relacionado ao Excel.
pacote com.research.spring.view; importar java.io.OutputStream; importar java.net.urlencoder; importar java.util.list; importar java.util.map; importar javax.servlet.http.httpServletRequest; importar 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; /** * Download Excel view* * @author wdmcygah * */ public class ExcelView extends AbstractExcelView { @Override protected void buildExcelDocument(Map<String, Object> model, HSSFWorkbook workbook, HttpServletRequest request, HttpServletResponse response) throws Exception { @SuppressWarnings("unchecked") List<UserInfo> list = (List <userInfo>) model.get ("infolist"); if (list! = null && list.size ()! = 0) {int len = list.size (); Folha de chapas = Pasta de trabalho.creatheet (); // a primeira linha de texto Descrição Linha Linha = Sheet.crerowerow (0); Cell Cell = Row.CreateCell (0, Cell.Cell_Type_String); Cell.SetCellValue ("Nome de usuário"); Cell = Row.CreateCell (1, Cell.Cell_Type_String); Cell.SetCellValue ("Senha"); // o seguinte é o conteúdo específico para (int i = 0; i <len; i ++) {row = sheet.crerowroow (i+1); Cell = Row.CreateCell (0, Cell.Cell_Type_String); Cell.SetCellValue (list.get (i) .getUserName ()); Cell = Row.CreateCell (1, Cell.Cell_Type_String); Cell.SetCellValue (list.get (i) .getPassword ()); }} Response.setContentType ("Application/vnd.ms-excel"); Response.Setcharacterencoding ("UTF-8"); // O nome do arquivo é codificado aqui para garantir que os caracteres chineses sejam exibidos normalmente durante o download da string filename = urlencoder.encode ("user.xls", "utf-8"); // Propriedade de conteúdo-Disposition está definido para baixar a resposta.setheader ("Content-Disposition", "Applement; FileName =" + FileName); OutputStream OS = Response.getOutputStream (); Work.write (OS); os.flush (); os.close (); }}(Iv) Arquivos de configuração principais
Ao fazer o upload de arquivos, você precisa configurar a classe multipartresolver no arquivo de configuração. Após a configuração, a primavera passará automaticamente o arquivo em um objeto multipart -arquivo e, em seguida, o processamento correspondente pode ser executado. Por exemplo, consulte a classe do controlador.
<? xml versão = "1.0" coding = "utf-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http:/wwww.w3 xmlns: p = "http://www.springframework.org/schema/p" xmlns: context = "http://www.springframework.org/schema/mvc" xmlns: util = "htttp://schema/mvc" xmlns: util = "htttp://schema/mvc" xmlns: util = "htttp://schema/mvc" xmlns: util = "htttp://schema" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http:/wwwww.springframwer-org-3.xsd http:/wwwww.springframwerw.orgug/ilil.xschema/utschema/utschema/utschema/utschema/utschema/utschema/utschema/utschema/utg/ilil/uttw http://www.springframework.org/schema/util/spring-util-3.0.xsd "> <Contexto: component-scan-package =" com.research "/> <ean> <names name = viewclass" = "org.sPringFramweb.web.web.web.lerw.lerw.lerw.lerw.lerw.lerw.lerw.lerw.lerw.lerw.lerw.lerw.leb.leb.leb.leb.len> value = "/web-inf/"/> <propriedade name = "sufix" value = ". value = "52428880000000"> </Property> <!-Caminho temporário para fazer upload do arquivo, ele será excluído automaticamente após o upload-> <propriedade name = "uploadtempdir" value = "upload/temp"> </propriedade> </bean> </ Beans>
(V) Página de teste
<html> <head> <meta http-equiv = "content-type" content = "text/html; charset = utf-8"/> </ad Head> <body> <h3> teste a função do download Excel </h3> <form Action = "File/Download.htm" "" RyTe = "(" Method/"Method/" Method/"Method") Teste a função do download </h3> <form Action = "File/Download" "" ". Excel "> </input> </morm> <h3> Teste a função de upload Excel </h3> <formulário/" file/upload.htm "Enctype =" Multipart/form-Data "Method =" post "> <input type =" name "name =" file "> </input> <input typ =" sndep "value =" </html>Se você quiser ver o código -fonte completo, poderá verificar no meu repositório do GitHub. Entre eles, o upload de arquivos apenas processa arquivos que atendem ao modelo de download. Para processar outros arquivos, você precisa implementá -lo sozinho. O teste de código foi aprovado sem erro.
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.