前言:
最近由于业务需要看了下ireport这款开源的报表工具,对于报表而言却是很方便
业务场景:
1.由于导出excel,不需要分页,所以需要将分页的显示去掉。勾选如下即可
2.由于在预览的时候会出现乱码,解决方案如下,即可解决乱码问题
3.可能在用户使用的时候,由于列或者行太多需要冻住某一列或者行(在拉滚动条的时候,该列,该行不会动)
我们需要重载父类的方法。如下
public class JRXlsExporter extends net.sf.jasperreports.engine.export.JRXlsExporter { private int colSplit; // 冻结行 private int rowSplit; // 冻结列public JRXlsExporter() { super(); } @Override protected void createSheet(CutsInfo xCuts, SheetInfo sheetInfo) { // TODO Auto-generated method stub super.createSheet(xCuts, sheetInfo); if (colSplit != 0 && rowSplit != 0)// 在不设置的情况下不调用 sheet.createFreezePane(colSplit, rowSplit); } public void createFreezePane(int colSplit, int rowSplit) { this.colSplit = colSplit; this.rowSplit = rowSplit; }
}
我们重载该方法,然后在导出excel的时候调用该方法,就可以了
@Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF-8"); ServletContext servletContext = this.getServletConfig() .getServletContext(); try { // 得到jasper文件 File jasperFile = new File( servletContext.getRealPath("/jasper/report4.jasper")); JasperReport jasperReport = (JasperReport) JRLoader .loadObject(jasperFile.getPath());Map<String,Object> parameters = new HashMap<String,Object>(); parameters.put(" CODE_VALUE","44797"); JasperPrint jasperPrint = JasperFillManager.fillReport( jasperReport, parameters, conn); <span style="color: #ff0000;">JRXlsExporter exporter = new com.ireport.servlet.JRXlsExporter(); exporter.createFreezePane(3, 3);</span> exporter.setParameter(JRXlsExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRXlsExporterParameter.OUTPUT_STREAM, response.getOutputStream()); exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE); exporter.setParameter( JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE); response.setHeader("Content-Disposition", "attachment;filename=first.xls"); response.setContentType("application/vnd_ms-excel"); exporter.exportReport(); } catch (JRException e) { e.printStackTrace(); } finally { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } }</pre>
按照红色的方法调用你所要冻结的列,或者行,就可以了。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于