用JasperReport实现窗口冻结

本文介绍如何利用 JasperReport 和 POI 框架实现 Excel 的冻结窗口功能。通过重写 JRXlsExporter 类并在创建 Sheet 时调用 createFreezePane 方法,可以实现指定行列的冻结。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以前在新浪博客上发表过一篇<jasperreport实现excel的冻结窗口>的思路。由于当时的客户后来不再要求实现该功能,后来就没再多思考。今天偶登录新浪博客,发现有人要例子源码,于是就总结实现了下。

 

先说下原理,jasperreport是没有实现冻结窗口功能的,但其底层用的是POI框架,也就是jasperreport是对poi的一个封装。POI是实现了对窗口冻结功能的,所以我们的思路就是通过对jasperreport的一些修改从而实现该功能。

POI的冻结窗口API(http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/Sheet.html):

createFreezePane (int colSplit, int rowSplit)
          Creates a split (freezepane).

 

其使用的例子,在百度文库中有(http://wenku.baidu.com/view/bcc25d0cba1aa8114431d91d.html),这里不再赘述。

 

通过查找jasperreport的源码,发现在net.sf.jasperreports.engine.export.JRXlsExporter类中createReport方法有对Sheet继承类HSSFSheet的操作,可以通过调用该类的createFreezePane(int colSplit, int rowSplit)方法来实现冻结窗口。

 

再查看我们写的导出excel方法(具体代码网上很多,这里也不再粘贴),如下:

      JRXlsExporter xlsExporter = new JRXlsExporter();
      xlsExporter.setParameter( JRExporterParameter.JASPER_PRINT, jasperPrint );  
      xlsExporter.setParameter( JRExporterParameter.OUTPUT_FILE, new File("E:/Workspaces_BJ/workBJ/asf/src/test/report/location_xls4Report.xls") );  
      xlsExporter.exportReport();

通过调试发现,net.sf.jasperreports.engine.export.JRXlsExporter类的createReport方法在上述代码的xlsExporter.exportReport()后调用,所以我们需要给她加个方法,在exportReport()之前进行设置即可。

 

在尽量不修改源码的前提下,我们重写net.sf.jasperreports.engine.export.JRXlsExporter类的createReport方法,并增加一个设置冻结窗口的方法,如下

package test.report;

public class JRXlsExporter extends
        net.sf.jasperreports.engine.export.JRXlsExporter {
    private int colSplit; //冻结行
    private int rowSplit; //冻结列
    @Override
    protected void createSheet(String name) {
        super.createSheet(name);
        if(colSplit != 0 && rowSplit!= 0)//在不设置的情况下不调用
            sheet.createFreezePane(colSplit, rowSplit);
    }
   
    public void createFreezePane(int colSplit, int rowSplit) {
        this.colSplit = colSplit;
        this.rowSplit = rowSplit;
    }
}

 

把以上原来导出excel的net.sf.jasperreports.engine.export.JRXlsExporter替换成我们重写后的test.report.JRXlsExporter,在new出实例后,如需设置冻结窗口,调用createFreezePane方法即可。所以最终代码如下:

      JRXlsExporter xlsExporter = new JRXlsExporter();
      xlsExporter.createFreezePane(1, 1);//设置冻结窗口
      xlsExporter.setParameter( JRExporterParameter.JASPER_PRINT, jasperPrint );  
      xlsExporter.setParameter( JRExporterParameter.OUTPUT_FILE, new File("E:/Workspaces_BJ/workBJ/asf/src/test/report/location_xls4Report.xls") );  
      xlsExporter.exportReport();

这样即可实现了。

 

在此总结,希望对自己有所提高,对大家有所帮助。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值