报表知识库
我要提问

如何利用API实现行式报表后台导入excel数据入库

润乾报表提供了excel导入页面后入库的功能,丰富了用户导入excel的方式。对于普通填报表,润乾报表提供了直接后台入库和导入页面入库的方式,那么在行式填报表中,如何实现后台导入excel入库呢?

用润乾报表提供的API接口,就可以完成这个功能。

下面是示例代码:

<%@ page contentType=”text/html;charset=GBK” %>
<%@ page import=”com.runqian.report4.usermodel.*”%>
<%@ page import=”com.runqian.base4.util.*”%>
<%@ page import=”com.runqian.report4.model.*”%>
<%@ page import=”com.runqian.report4.util.*”%>
<%@ page import=”com.runqian.report4.cache.CacheManager”%>
<%@ page import=”java.io.*”%>

<%@ page import=”com.runqian.report4.dataset.DataSet”%>
<%@ page import=”com.runqian.report4.dataset.SQLDataSetFactory”%>
<%@ page import=”com.runqian.report4.view.olap.OlapUtils”%>
<%@ page import=”com.runqian.report4.view.excel.ExcelReport”%>
<%@ page import=”java.sql.Connection”%>
<%@ page import=”java.sql.Driver”%>
<%@ page import=”java.sql.DriverManager”%>
<%@page import=”com.runqian.report4.ide.ExcelImporter”%>
<%@page import=”com.runqian.report4.usermodel.input.InputProperty”%>
<%@page import=”com.runqian.report4.input.DataSaver”%>
<%@page import=”com.runqian.report4.model.engine.ExtCellSet”%>
<%@page import=”com.runqian.report4.model.engine2.RowReport”%>
<%@page import=”com.runqian.report4.input.RowReportSaver”%>
<%@page import=”java.text.SimpleDateFormat”%>
<%@page import=”com.runqian.base4.resources.FormatUtils”%>
<%@page import=”java.util.Locale”%>



<%
//设置报表路径
String reportFile = “D:\\testupdate.raq”;
Context cxt = new Context();
ReportDefine rd = null;
try {
//读取报表模版定义
rd = (ReportDefine) ReportUtils.read(reportFile);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(”报表读取完毕===================================”);
//计算报表
Engine engine = new Engine(rd, cxt);
IReport iReport = engine.calc();
//将计算完的报表转换成行式报表对象
RowReport rr = (RowReport)iReport;
//第几行是主扩展行
String did = rr.getDetailID( 1 );
//定义报表保存的参数
SimpleDateFormat dateF = new SimpleDateFormat( FormatUtils.getDateFormat( Locale.getDefault() ) );
SimpleDateFormat timeF = new SimpleDateFormat( FormatUtils.getTimeFormat( Locale.getDefault() ) );
SimpleDateFormat datetimeF = new SimpleDateFormat( FormatUtils.getDatetimeFormat( Locale.getDefault() ) );
//设置excel路径
String excelFile = “D:\\test1500.xls”;
//生成excel导入对象
ExcelImporter ei = new ExcelImporter(excelFile);
//得到excel中的第一个sheet的对象
IReport excelReport = ei.getReport(0);
//构造数据保存对象
RowReportSaver rowSaver = new RowReportSaver(rr, null, cxt);
//读入excel文件及其数据
//逐行逐列把excel数据写入填报表
for(int i=1;i<=excelReport.getRowCount();i++){
//先插入一行,这里是不定行导入excel数据
Area area = rr.insertDetail( did );
//循环取得excel单元格
for(int j=1;j<=iReport.getColCount();j++){
INormalCell iExcelCell=excelReport.getCell(i, (short)j);

if( iExcelCell == null ) continue;
String svalue = “”;
//得到单元格的值
Object value = iExcelCell.getValue();
if( value != null )
svalue = value.toString();
//把填报值保存到数据保存对象中
rowSaver.setCellInputValue( area.getBeginRow(), (short)j, svalue, dateF, timeF, datetimeF );

}

}
//执行保存
rowSaver.save();
out.print(”数据保存成功”);

%>


通过这样的方式,我们就可以利用API来对行式填报表进行后台数据直接入库的功能了。