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对象,这样才能导出数据库中的数据。
另外,对于那些要删除的行或列不确定的情况,需要对行,列做一个判断,判断行,列的属性或者单元格的属性来确定该删除哪一行。