API导出EXCEL删除报表某一行或列

业务需求:

客户有一张报表,第一列全是复选框,希望在导出EXCEL的时候不要导出这些复选框,只导出对应的数据。

解决办法:

由于报表的导出是所见即所得,无法在导出的时候手动去删除某一列,所以只能通过API导出,然后指定删除第一列,重新生成一个iReport对象,然后导出。

以下是代码部分:

package ApiTest;

import com.runqian.report4.model.ReportDefine;

import com.runqian.report4.model.engine.ExtCellSet;

import com.runqian.report4.usermodel.Context;

import com.runqian.report4.usermodel.Engine;

import com.runqian.report4.usermodel.IReport;

import com.runqian.report4.usermodel.PageBuilder;

import com.runqian.report4.usermodel.PrintSetup;

import com.runqian.report4.util.ReportUtils;

import com.runqian.report4.tag.*;

public class ExpExcel {

/**

* @param args

* @throws Throwable

*/

public static void main(String[] args) throws Throwable {

Context cxt = new Context(); //构建报表引擎计算环境

String reportFile = “D:\\Program Files\\reportHome\\webapps\\demo\\reportFiles\\订单内建.raq”; //该文件名可以为绝对路径,也可以相对当前程序启动路径

ExtCellSet.setLicenseFileName(“D:\\报表\\润乾授权文件\\2012年授权\\V4授权\\北京润乾信息系统技术有限公司咨询中心Server2012-06-30V4.0Windows.lic”); //设置授权文件

ReportDefine rd = (ReportDefine)ReportUtils.read(reportFile);

PrintSetup ps = new PrintSetup();

ps.setPagerStyle(ps.PAGER_ROW);

ps.setRowNumPerPage(10);

rd.setPrintSetup(ps);

rd.removeRow(1);//删除第一行

//rd.removeCol((short)1);//删除第一列

Engine engine = new Engine(rd, cxt); //构造报表引擎

IReport iReport = engine.calc(); //运算报表

System.out.println(rd.getPrintSetup().getPagerStyle());

ReportUtils.exportToExcel(“D:/testExpExcel999.xls”,iReport,false);//第三个参数false设置报表导出为不分页导出,若为true,则是分页导出

}

}

当然,如果在实际情况中报表是会连接数据库的,那么还需要在API中获取到JDBC数据库连接,然后赋值给报表的context对象,这样才能导出数据库中的数据。

另外,对于那些要删除的行或列不确定的情况,需要对行,列做一个判断,判断行,列的属性或者单元格的属性来确定该删除哪一行。