总结一下,方便以后查看。

说下自己的这个能够把页面表格导出成excel文件的总体印象:

1需要导入jxl包,我的是jxl-2.6.12.jar

2.写一个工具类,传三个参数:OutputStream os,String[] labels,List<String[]> rows;

  OutputStream os:要写入的地方,如果是放浏览器下载,os=response.getOutputStream(),如果是一个固定的地方,os=new FileOutputStream(new File("D:/a.excel").

  String[] labels:这是你表格里第一行。jsp页面导出excel,jxl技术_java

 List<String[]> rows:是下面正式的数据,一个String[]数组一行row,数组大小和labels的一样。

方法代码:

public static void createExport(OutputStream os,String[] labels,List<String[]> cells) throws Exception{
        WritableWorkbook wwb = Workbook.createWorkbook(os); // 建立excel文件  
        WritableSheet ws = wwb.createSheet("Sheet1", 10);        // 创建一个工作表
        WritableFont wf = new WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD,false,//设置单元格的文字格式
                UnderlineStyle.NO_UNDERLINE,Colour.BLACK);
        WritableCellFormat wcf = new WritableCellFormat(wf);
                                                                                                                                                                                         
                                                                                                                                                                                         
        wcf.setVerticalAlignment(VerticalAlignment.CENTRE);
        wcf.setAlignment(Alignment.CENTRE);
        ws.setRowView(0, 500);
                                                                                                                                                                                         
        //设置列头名
        for (int j=0;j<labels.length;j++){
           ws.addCell(new Label(j, 0, labels[j], wcf));
                                                                                                                                                                                           
        }
        for (int i = 0; i <cells.size();i++){
            String[] arys=cells.get(i);
            ws.setRowView(i+1, 600);
            for (int j=0;j<arys.length;j++){
               ws.addCell(new Label(j, i+1,arys[j], wcf));
               if(arys[j]!=null && arys[j].length()>0){
                   ws.setColumnView(j,arys[j].length()+7);
               }else{
                   ws.setColumnView(j,30);
               }
            }
        }
        wwb.write();
        wwb.close();
    }
}

3写一个方法 去生成数据,把String[] labels和String[] rows填满,传给createExport()方法。我就以用户列表的形式为例。


public void exportUsersListToExcel(HttpServletResponse response,StringBuilder sql) {
        // TODO Auto-generated method stub
        String[] labels={"用户编号","用户名","真实姓名"};
        List<String[]> cells=new ArrayList<String[]>();
        List<UserProfile> users =this.findUserByNativeSql(sql, -1, -1);//查询方法,自己定义的
        SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm");
        try {
    for (UserProfile user : users) {
    String[] cell=newString[labels.length];
    cell[0]=String.valueOf(user.getId());
    cell[1]=user.getUserName();
    cell[2]=user.getRealName();
    cells.add(cell);
        }
            ExcelExportUtil.createExport(response.getOutputStream(), labels, cells);
        } catch (Exception e) {
        e.printStackTrace();
        }
    }

4页面发请求,进入Servlet.我用的是spring mvc,进入Controller,写个方法,调第三步的方法,返回给浏览器,生成数据。

@RequestMapping(value = "/customer_base_manage/exportToExcel", produces = { "text/html;charset=UTF-8" })
    public void exportUsersListToExcel(
            HttpServletResponse response,
            @RequestParam(value = "condition", defaultValue = "all") String condition,
            @RequestParam(value = "context", defaultValue = "") String context) {
        response.reset();
        try {
            response.setHeader("Content-disposition", "p_w_upload;filename="
                    + new String("用户信息列表".getBytes("GB2312"), "8859_1")
                    + ".xls");
            response.setContentType("application/msexcel");
            customerService.exportUsersListToExcel(response,
                    getClauseSql(condition, context));
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
  • 这里有几点注意:

  • getClauseSql()是自定义的生成查询语句的方法,传到第三步的方法参数。

  • respons需要reset()一下

  • 设置发给客户端浏览器的消息头。设置文件名文档类型。response.setHeader()和response.setContentType();


           每次应用环境不一样,有的地方需要自己自由发挥。全当自己给自己总结,写的不好或有不正确的地方,希望能有同道高手指正。jsp页面导出excel,jxl技术_spring mvc_02