如何利用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”%>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
<html>
 <head>
 </head>

 <body>
 
  <%
  //设置报表路径
  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(“数据保存成功”); 
 
  %>

  
 </body>
</html>

 

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