如何在Spring Boot中创建Apache POI Excel视图配置

当我想使用spring boot web将数据导出到excel时,我遇到了问题。

我使用Thymeleaf作为模板引擎(由spring boot自动配置)。 但是当我在我的附加配置中添加XmlViewResolver时,我的百万美元视图由XmlViewResolver解决,这绝对无法解决。 我尝试通过创建新类解决该问题,扩展WebMvcConfigurerAdapter并在那里重新配置thymeleaf模板解析器。 但是我的模板无法解决,因为找不到我的模板位置。 我把它放进去:

/resources/template/ 

请帮帮我。

使用Spring Boot,您无需任何额外配置即可生成Excel文件。

使用AbstractExcelView创建一个返回ModelAndView的控制器:

 @Controller public class MyController { @RequestMapping(value="/myexcel", method=RequestMethod.GET) public ModelAndView getMyData(HttpServletRequest request, HttpServletResponse response) throws SQLException{ Map model = new HashMap(); //Sheet Name model.put("sheetname", "TestSheetName"); //Headers List List headers = new ArrayList(); headers.add("Column1"); headers.add("Column2"); headers.add("Column3"); model.put("headers", headers); //Results Table (List) List> results = new ArrayList>(); List l1 = new ArrayList(); l1.add("A1"); l1.add("B1"); l1.add("C1"); results.add(l1); List l2 = new ArrayList(); l2.add("A2"); l2.add("B2"); l2.add("C2"); results.add(l2); model.put("results",results); response.setContentType( "application/ms-excel" ); response.setHeader( "Content-disposition", "attachment; filename=myfile.xls" ); return new ModelAndView(new MyExcelView(), model); } 

然后构建您的AbstractExcelView,如:

 public class MyExcelView extends AbstractExcelView { @SuppressWarnings("unchecked") protected void buildExcelDocument(Map model, HSSFWorkbook workbook, HttpServletRequest request, HttpServletResponse response) { //VARIABLES REQUIRED IN MODEL String sheetName = (String)model.get("sheetname"); List headers = (List)model.get("headers"); List> results = (List>)model.get("results"); List numericColumns = new ArrayList(); if (model.containsKey("numericcolumns")) numericColumns = (List)model.get("numericcolumns"); //BUILD DOC HSSFSheet sheet = workbook.createSheet(sheetName); sheet.setDefaultColumnWidth((short) 12); int currentRow = 0; short currentColumn = 0; //CREATE STYLE FOR HEADER HSSFCellStyle headerStyle = workbook.createCellStyle(); HSSFFont headerFont = workbook.createFont(); headerFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); headerStyle.setFont(headerFont); //POPULATE HEADER COLUMNS HSSFRow headerRow = sheet.createRow(currentRow); for(String header:headers){ HSSFRichTextString text = new HSSFRichTextString(header); HSSFCell cell = headerRow.createCell(currentColumn); cell.setCellStyle(headerStyle); cell.setCellValue(text); currentColumn++; } //POPULATE VALUE ROWS/COLUMNS currentRow++;//exclude header for(List result: results){ currentColumn = 0; HSSFRow row = sheet.createRow(currentRow); for(String value : result){//used to count number of columns HSSFCell cell = row.createCell(currentColumn); if (numericColumns.contains(headers.get(currentColumn))){ cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC); cell.setCellValue(NumUtils.extractDoubleOrZero(value)); } else { HSSFRichTextString text = new HSSFRichTextString(value); cell.setCellValue(text); } currentColumn++; } currentRow++; } } }