当前位置 : 主页 > 编程语言 > java >

将数据导出EXCEL

来源:互联网 收集:自由互联 发布时间:2021-06-28
gistfile1.txt 之前写过Excel的导入与导出,但是缺少总结,现在总结一下。现在大多使用的是poi和jxl,关于二者的比较,可以百度,相较而言,还是poi好一点,需要用到的是poi,需要之前引
gistfile1.txt
之前写过Excel的导入与导出,但是缺少总结,现在总结一下。
现在大多使用的是poi和jxl,关于二者的比较,可以百度,相较而言,还是poi好一点,
需要用到的是poi,需要之前引入,如果是maven项目,添加如下代码:

 
    
  
   org.apache.poi
  
    
  
   poi
  
    
  
   3.10-FINAL
  

 

 
    
  
   org.apache.poi
  
    
  
   poi-ooxml
  
    
  
   3.10-FINAL
  

 
poi也有两个不同的jar包,分别是处理excel2003和excel2007+的,对应的是poi和poi-ooxml。poi-ooxml是poi的升级版本,处理的单页数据量也是百万级别的,所以我们选择的也是poi-ooxml。
前端代码也有必要说一下,用ajax访问后端,成功后得到的是输出流,如果指定文件存储位置的话还好,会存在指定路径,但是想要得到弹出框并且选择存储路径的话,就不太好办了。这个时候选择form表单提交的方式会很好。

 
    
  
ajax部分: $.ajax({ url : 'exportSubject', data:$("#export_subject").serialize(), type : 'POST', async:false, dataType: "json", success: function (data){ console.log(data); if(data.result == 'error'){ alert(data.reason); } }, error: function(data){ console.log(data); alert(data.reason); } }); 注:这样打印出来的东西是一堆乱码,因为返回的流信息解析不了。 于是用下面的方法: var form = document.getElementById('export_subject'); form.action = "exportSubject"; form.submit(); 但是这样的话有异常的话会跳错误页,不会弹出你想返回的错误信息。 下面看看后台的java代码: import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.json.JSONObject; import java.io.InputStream; import java.io.OutputStream; import net.sf.json.JSONArray; /** * 导出分入分出科目 * @param request * @param response * @return * @throws Exception */ @RequestMapping(value = "/exportSubject", method = RequestMethod.POST) @ResponseBody public Object exportSubject(HttpServletRequest request,HttpServletResponse response, @RequestParam String billNum, @RequestParam String batchId ) throws Exception{ String fileName ="aaa" + Calendar.getInstance().getTimeInMillis(); OutputStream os = null; try { Map paraMap = new HashMap<>(); paraMap.put("batchId", new BigDecimal(batchId)); paraMap.put("billNum", billNum); //得到查询的数据 String result = this.restTemplte.postForEntity(URL + "/shareManage/shareSubList", paraMap, String.class).getBody(); List > jsonArray = JSONArray.fromObject(result); XSSFWorkbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("sheet名"); CellStyle style = workbook.createCellStyle(); style.setAlignment(CellStyle.ALIGN_CENTER);//居中显示 style.setFillBackgroundColor(IndexedColors.AQUA.getIndex()); style.setBorderBottom(CellStyle.BORDER_THIN); style.setBorderLeft(CellStyle.BORDER_THIN); style.setBorderRight(CellStyle.BORDER_THIN); style.setBorderTop(CellStyle.BORDER_THIN); Row row = sheet.createRow(0); Cell cell = row.createCell(0); cell.setCellValue("标题一"); cell.setCellStyle(style); cell = row.createCell(1); cell.setCellValue("标题二"); cell.setCellStyle(style); cell = row.createCell(2); cell.setCellValue("标题三"); cell.setCellStyle(style); cell = row.createCell(3); cell.setCellValue("标题四"); cell.setCellStyle(style); cell = row.createCell(4); cell.setCellValue("标题五"); cell.setCellStyle(style); cell = row.createCell(5); cell.setCellValue("标题六"); cell.setCellStyle(style); //填充数据 int n = 1; for(Map map : jsonArray){ row = sheet.createRow(n); cell = row.createCell(0); cell.setCellValue(map.get("OSUBJECTNUM")+""); cell.setCellStyle(style); cell = row.createCell(1); cell.setCellValue(map.get("OSUBJECTNAME")+""); cell.setCellStyle(style); cell = row.createCell(2); cell.setCellValue(map.get("ISUBJECTNUM")+""); cell.setCellStyle(style); cell = row.createCell(3); cell.setCellValue(map.get("ISUBJECTNAME")+""); cell.setCellStyle(style); cell = row.createCell(4); cell.setCellValue(map.get("ZWMC")+""); cell.setCellStyle(style); cell = row.createCell(5); cell.setCellValue(map.get("REVERSE")+""); cell.setCellStyle(style); n++; } response.reset(); response.setContentType("application/vnd.ms-excel;charset=utf-8"); response.setHeader("Content-Disposition", "attachment;filename="+ new String((fileName + ".xlsx").getBytes(), "iso-8859-1")); //os = response.getOutputStream(); //os = new FileOutputStream("E://a.xlsx"); 指定存储位置 os= new BufferedOutputStream(response.getOutputStream()); workbook.write(os); os.flush(); os.close(); } catch (Exception e) { e.printStackTrace(); return e.getMessage(); }finally{ try { if(null != os){ os.close(); } } catch (IOException e2) { logger.error(e2.getMessage()); } } return fileName; }
网友评论