基于springboot+js的以Excel表格形式导出数据

it2023-07-09  67

基于springboot+js的以Excel表格形式导出数据

控制层Controller

这里要导出文件的list集合,为你想导出的数据

@RequestMapping(value = "/exportExcelOfSite", method = RequestMethod.GET) @ResponseBody public void exportExcelOfSite(HttpServletResponse response, String user_site) throws Exception { Map map = new HashMap(); map.put("user_site",user_site); //要导出文件的list集合 List<Map> list = new ArrayList(); list = deviceGroupService.listSite(map); String fileName = "场地列表·" + System.currentTimeMillis() + ".xlsx"; //sheet名 String sheetName = "场地中心"; String[][] content = new String[list.size()][8]; //其中cecknull()为判断字段是否为空,如果为空,将“”来代替,防止Excel表格数据不一致 //下面为输入要打印的list集合里面的元素 for (int i = 0; i < list.size(); i++) { Map obj = list.get(i); String state = null;//状态 StringUtil su = new StringUtil();//判断是否为空的工具类 content[i][0] = su.cecknull(String.valueOf(obj.get("name"))); content[i][1] = su.cecknull(String.valueOf(obj.get("describe"))); content[i][2] = su.cecknull(String.valueOf(state)); content[i][3] = su.cecknull(String.valueOf(obj.get("tag"))); content[i][4] = su.cecknull(String.valueOf(obj.get("user_site"))); content[i][5] = su.cecknull(String.valueOf(obj.get("tag"))); } //创建HSSFWorkbook //参数为Excel表格的表头对应上面的元素 //6万数据以上,数据量过大,需要考虑内存JVM溢出 SXSSFWorkbook wb = ExcelUtil.getSXSSFWorkbook(sheetName, new String[]{"名称", "描述", "状态", "信息","责任人","标签"}, content, null); //6万数据以下 //SXSSFWorkbook wb = ExcelUtil.getXSSFWorkbook(sheetName, new String[]{"名称", "描述", "状态", "信息","责任人","标签"}, content, null); //响应到客户端 try { ExcelUtil.setResponseHeader(response, fileName); OutputStream os = response.getOutputStream(); wb.write(os); os.flush(); os.close(); } catch (Exception e) { e.printStackTrace(); } }

判断是否为空的方法

/** * 判断是否为null,如果为null转化为"" * @param str * @return */ public String cecknull(String str) { if (str == null || str.equals("null")) return ""; else return str; }

Maven pom.xml要引入的依赖

<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency>

Excel工具类的方法 ExcelUtil.java

这边建议把这几个方法单独写到一个工具类里呦

/** * 导出Excel * @param sheetName sheet名称 * @param title 标题 * @param values 内容 * @param wb HSSFWorkbook对象 * @return */ public static SXSSFWorkbook getSXSSFWorkbook(String sheetName,String []title,String [][]values, SXSSFWorkbook wb){ // 第一步,创建一个HSSFWorkbook,对应一个Excel文件 if(wb == null){ wb = new SXSSFWorkbook(); } // 第二步,在workbook中添加一个sheet,对应Excel文件中的sheet Sheet sheet = wb.createSheet(sheetName); // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制 Row row = sheet.createRow(0); //声明列对象 Cell cell = null; //创建标题 for(int i=0;i<title.length;i++){ cell = row.createCell(i); cell.setCellValue(title[i]); } //创建内容 for(int i=0;i<values.length;i++){ row = sheet.createRow(i + 1); for(int j=0;j<values[i].length;j++){ //将内容按顺序赋给对应的列对象 row.createCell(j).setCellValue(values[i][j]); } } return wb; } //设置请求头参数 public static void setResponseHeader(HttpServletResponse response, String fileName) { try { try { fileName = new String(fileName.getBytes(),"ISO8859-1"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } response.setContentType("application/octet-stream;charset=ISO8859-1"); response.setHeader("Content-Disposition", "attachment;filename="+ fileName); response.addHeader("Pargam", "no-cache"); response.addHeader("Cache-Control", "no-cache"); } catch (Exception ex) { ex.printStackTrace(); } }

js

前端js用于解析后端传过来的字节流,解析为Excel文件形式

function exportExcel() { window.location.href = '';//引号里为请求地址和参数 }

这里为导出文件的样子

最新回复(0)