起步平台实现导出Excel表

起步平台实现导出Excel表

本文主要介绍起步平台的.J文件调用action,在action类的方法里采用文件流的方式输出excel表格。其中数据是通过JavaScript得到过滤条件传到action里查询数据而得到的。

  • 1.前端JavaScript方法设置
  • 2.J文件的实现
  • 3.action类的实现
  • 4.配置action动作
  • 5.导出的excel表
  • 注意事项

一.JavaScript的方法实现

首先在起步平台的UI模块下新建一个.w文件,然后拖入相应的按钮,设置按钮的click事件,对应的click事件方法体如下

var mainActivity={};
mainActivity.exportExcel=function(event){
    var filterHanding=justep.xbl("FLITERHANDING");
    var filterAnd=filterHanding.getFilter("filter1");
    var concept=filterHanding.getConceptName();
    var url = justep.Request.convertURL("/UI/eample/eample/process/eample/eample/ExportExcel.j");
    var parameters = [];//参数
    parameters.push( "executor=" +justep.Context.getCurrentPersonID() );//当前执行者
    parameters.push( "filter=" +encodeURIComponent(filterAnd));//查询数据的过滤条件,要进行JavaScript转码
    parameters.push( "concept="+concept);//查询的概念
    url += "&" + parameters.join("&");//打开窗口的URL地址
    window.open(url);
};

二.编写.J文件

在相关的UI模块下新建.J文件,命名为/UI/example/example/process/example/example/ExportExcel.j。具体代码如下所示:

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.justep.biz.client.Action;
import com.justep.biz.client.ActionEngine;
import com.justep.biz.client.ActionUtils;
import com.justep.biz.client.Callback;
import com.justep.biz.client.StreamCallback;
import com.justep.ui.util.NetUtils;

public class ExportExcel extends com.justep.ui.impl.JProcessorImpl  {
        @Override
        public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //创建请求的action对象
        Action action = new Action();
//添加Process参数        action.setProcess("/eample/eample/process/eample/eampleProcess");
        //添加相应的Activity
        action.setActivity("mainActivity");
        //添加请求的action名称
        action.setName("exportExcel");
        //获取当前执行者的名称
        String executor=request.getParameter("executor");
        //添加当前执行者名称的参数
        action.setExecutor(executor);
        //创建时间戳
        Date date=new Date();
        //获取过滤的查询条件语句
        String filter= request.getParameter("filter");
        //获取查询的概念
        String concept=request.getParameter("concept");
        //传入action的参数                action.setParameter("parameters",filter+"@@@"+concept+"@@@"+date.getTime());   
        //获取sessionId值
        String bSessionID = NetUtils.getBSessionID(request);
        //语言目录
        String language = NetUtils.getLanguage(request);
        //设置返回页面的信息
        String contentDisposition = null;
        try {
        contentDisposition = "attachment;filename=\"" + java.net.URLEncoder.encode("excel导出"+date.getTime()+".xls", "utf-8") + "\";";
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        //设置response的头信息
        response.addHeader("Content-disposition", contentDisposition);
        //设置编码格式
        response.setCharacterEncoding("utf-8");
        //创建action回调对象
        Callback callback = new StreamCallback(response);
        //反射调用actiong
        try {
            //调用action对象
ActionEngine.invokeAction(action, ActionUtils.XML_CONTENT_TYPE, bSessionID, language, callback);
        } catch (Exception e) {
throw new RuntimeException("文件下载错误 : " + e.getMessage());
        }
    };  
}

三.编写.J文件调用的exportExcel方法体

可以上面看到上面调用的action名称为exportExcel,下面编写其实现。
在UI对应的biz目录下新建action文件的类,添加方法体;或者在相应的xxx.action.m里添加相应的方法,方法里包含相应的参数,生成procedure文件,和java类,然后再在生成的java类里的方法体里添加相应的代码实现。

/**
     * @author Jeao.H
     * @param parameters
     * @category 用于导出的excel表的action
     * @return  InputStream
     * @throws Exception
     * 
     */
    public static InputStream exportExcel(String parameters) throws Exception {
        //创建输出流
        InputStream inputSteam = null;
        //创建导出文件路径
        String basePath=System.getProperty("user.home")+"\\Excel文件导出\\";
        //创建生成文件路径的文件对象
        File base=new File(basePath);
        //当前文件对象所指的硬盘对象是否存在
        if (!base.exists()) {
            //如果不存在,创建
            base.mkdirs();
        }
        //创建导出的Excel文件对象
File file=new File(basePath+ File.separator+"经办文件excel导出"+parameters.split("@@@")[2]+".xls");
    HSSFWorkbook book = new HSSFWorkbook();
    HSSFSheet sheet = book.createSheet();
    HSSFRow firstRow = sheet.createRow(0);
    //获取经办文数据对象才
    Table handingTable=queryFLITERHANDINGTASK(parameters);      
            //创建第一行的excel元素
            HSSFCell[] firstCells = new HSSFCell[11];
            //第(1,1)个坐标元素
            firstCells[0] = firstRow.createCell(0);
firstCells[0].setCellValue(newHSSFRichTextString("XXX1"));
            //第(1,2)个坐标元素
firstCells[1] = firstRow.createCell(1);
firstCells[1].setCellValue(new HSSFRichTextString("XXX2"));
            //第(1,3)个坐标元素
            firstCells[2] = firstRow.createCell(2);
firstCells[2].setCellValue(new HSSFRichTextString("XXX3"));
            //第(1,4)个坐标元素
            firstCells[3] = firstRow.createCell(3);
firstCells[3].setCellValue(new HSSFRichTextString("XXX4"));
            //第(1,5)个坐标元素
            firstCells[4] = firstRow.createCell(4);
firstCells[4].setCellValue(new HSSFRichTextString("XXX5"));
            //第(1,6)个坐标元素
            firstCells[5] = firstRow.createCell(5);
firstCells[5].setCellValue(new HSSFRichTextString("XXX6"));
            //第(1,7)个坐标元素
            firstCells[6] = firstRow.createCell(6);
firstCells[6].setCellValue(new HSSFRichTextString("XXX7"));
            //第(1,8)个坐标元素
            firstCells[7] = firstRow.createCell(7);
firstCells[7].setCellValue(new HSSFRichTextString("XXX8"));
            //第(1,9)个坐标元素
            firstCells[8] = firstRow.createCell(8);
firstCells[8].setCellValue(new HSSFRichTextString("XXX9"));
            //第(1,10)个坐标元素
            firstCells[9] = firstRow.createCell(9);
firstCells[9].setCellValue(newHSSFRichTextString("XXX10"));
            //第(1,11)个坐标元素
            firstCells[10] = firstRow.createCell(10);
    firstCells[10].setCellValue(new HSSFRichTextString("XXX11"));

            //如果查询的经办文数据不为空,往Excel表里塞入数据
            if(handingTable!=null){
                if (handingTable.size()>0) {                
                    Iterator<Row>iterator=handingTable.iterator();
                    Row rows=null;
                    HSSFRow sheetRow = null;
                    int n=1;
                    while (iterator.hasNext()) {
                        rows =iterator.next();
                        sheetRow = sheet.createRow(n);
                        //循环创建第(n+1)行的excel元素
                        HSSFCell[] Cells = new HSSFCell[11];
                        //创建第(n+1,1)单元元素
                        Cells[0] = sheetRow.createCell(0);
                        Cells[0].setCellValue(new HSSFRichTextString(rows.getString("XXX1")));
                        //创建第(n+1,2)单元元素
                        Cells[1] = sheetRow.createCell(1);
                        Cells[1].setCellValue(new HSSFRichTextString(rows.getString("XXX2")));
                        //创建第(n+1,3)单元元素
                        Cells[2] = sheetRow.createCell(2);
                        Cells[2].setCellValue(new HSSFRichTextString(rows.getString("XXX3")));
                        //创建第(n+1,4)单元元素
                        Cells[3] = sheetRow.createCell(3);
                        Cells[3].setCellValue(new HSSFRichTextString(rows.getString("XXX4")));
                        //创建第(n+1,5)单元元素
                        Cells[4] = sheetRow.createCell(4);
                        Cells[4].setCellValue(new HSSFRichTextString(rows.getString("XXX5")));
                        //创建第(n+1,6)单元元素
                        Cells[5] = sheetRow.createCell(5);
                        Cells[5].setCellValue(new HSSFRichTextString(rows.getString("XXX6")));
                        //创建第(n+1,7)单元元素                        
                        Cells[6] = sheetRow.createCell(6);
                        Cells[6].setCellValue(new HSSFRichTextString(rows.getString("XXX7")));
                        //创建第(n+1,8)单元元素
                        Cells[7] = sheetRow.createCell(7);
                        Cells[7].setCellValue(new HSSFRichTextString(""+rows.getDate("XXX8")));
                        //创建第(n+1,9)单元元素
                        Cells[8] = sheetRow.createCell(8);
                        if (rows.getDate("XXX9")==null) {
                            Cells[8].setCellValue(new HSSFRichTextString("无"));
                        }else{
                            Cells[8].setCellValue(new HSSFRichTextString(""+rows.getDate("XXX9")));
                        }           
                        //创建第(n+1,10)单元元素
                        Cells[9] = sheetRow.createCell(9);
                        if (rows.getString("XXX10")==null||"".equals(rows.getString("XXX"))) {
                            Cells[9].setCellValue(new HSSFRichTextString("无"));
                        }else{
                            Cells[9].setCellValue(new HSSFRichTextString(rows.getString("XXX10")));
                        }
                        //创建第(n+1,11)单元元素                   
                        Cells[10] = sheetRow.createCell(10);
                        if (rows.getString("XXX10")==null||"".equals(rows.getString("XXX11"))) {
                        Cells[10].setCellValue(new HSSFRichTextString("无"));
                        }else{                          
                        Cells[10].setCellValue(new HSSFRichTextString(rows.getString("XXX11")));
                        }
                        n++;                
                    }

                }

            }           
            file = new File(basePath + File.separator +"excel导出"+parameters.split("@@@")[2]+".xls");    
            if (!file.exists()) {
                file.createNewFile();
            }
            OutputStream os = new FileOutputStream(file);
            book.write(os);
            os.close();
                inputSteam = new FileInputStream(basePath + File.separator +"excel导出"+parameters.split("@@@")[2]+".xls");       
        return inputSteam;

    }

四.Excel导出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值