excel的导出

 
  
public class DownloadUtils {

    /**
     * 进行BASE64Encoder编码
     * @param fileName
     * @return
     */
    public static String base64EncodeFileName(String fileName) {
        
        BASE64Encoder base64Encoder = new BASE64Encoder();
        try {
            return "=?UTF-8?B?"
                    + new String(base64Encoder.encode(fileName
                            .getBytes("UTF-8"))) + "?=";
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }
    /** 
      * @Title:  exportExcel 
      * @Description:  文件的导出
      * @param request  
      * @param response
      * @param list     需要放入表格中的数据,格式为:List<Map<String,Object>> 
      * @param titleList  每一列上面的标题集合
      * @param fileName   该excel的默认名称
      * @param paramList  参数集合,装载上面list中Map集合的key(一 一 对 应)
      * @throws ServletException
      * @throws IOException: void
    */ 
    public static void exportExcel(HttpServletRequest request, HttpServletResponse response,List<Map<String, Object>> list,
            List<String> titleList ,String fileName,List<String> paramList )
            throws ServletException, IOException {

        //临时文件名
        String path = request.getRealPath("\\excel");
        String tempFileName=fileName+""+System.currentTimeMillis();
        File temp=new File(path+ "/"+tempFileName+".xls");
        //火狐的编码是base64 IE的编码是URL
        String agent = request.getHeader("user-agent");
        //需要导出的数据
        //导出excel
        

            /** **********创建工作簿************ */
            try {
            /** **********创建工作表************ */
            WritableWorkbook workbook = Workbook.createWorkbook(temp);


            WritableSheet sheet = workbook.createSheet("Sheet1", 0);
            /** **********设置纵横打印(默认为纵打)、打印纸***************** */
            jxl.SheetSettings sheetset = sheet.getSettings();
            sheetset.setProtected(false);
            /** **********设置页边距(0.1d=0.26cm)  ***************** */
            sheet.getSettings().setBottomMargin(0.7d);  
            sheet.getSettings().setTopMargin(0.7d);  
            sheet.getSettings().setLeftMargin(0.75d);  
            sheet.getSettings().setRightMargin(0.75d);
            /** **********设置是否显示行数列数编号  ***************** */
            sheet.getSettings().setPrintHeaders(true); 
            /** ************设置单元格字体************** */
            WritableFont fontTable=new WritableFont(WritableFont.createFont("微软雅黑"),16,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,Colour.WHITE);
            WritableCellFormat formatTable = new WritableCellFormat(fontTable); 
            Color color = Color.decode("#1D933A"); // 自定义的颜色
            workbook.setColourRGB(Colour.ORANGE, color.getRed(),
            color.getGreen(), color.getBlue());
            formatTable.setBackground(Colour.ORANGE);
            WritableFont font=new WritableFont(WritableFont.createFont("微软雅黑"),12,WritableFont.NO_BOLD );
            WritableCellFormat format1 = new WritableCellFormat(font); 
            Color colorTitle= Color.decode("#E4F7D6");
            workbook.setColourRGB(Colour.AQUA, colorTitle.getRed(),
                    colorTitle.getGreen(), colorTitle.getBlue());
            format1.setBackground(Colour.AQUA);
            WritableFont font2=new WritableFont(WritableFont.createFont("微软雅黑"),12,WritableFont.NO_BOLD );
            WritableCellFormat format2 = new WritableCellFormat(font2); 
            WritableFont font3=new WritableFont(WritableFont.createFont("微软雅黑"),12,WritableFont.BOLD );
            WritableCellFormat format3 = new WritableCellFormat(font3); 
            // 把水平对齐方式指定为居中 
            formatTable.setAlignment(jxl.format.Alignment.CENTRE);
            // 把垂直对齐方式指定为居中 
            formatTable.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
            formatTable.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN);
            // 把水平对齐方式指定为居中 
            format1.setAlignment(jxl.format.Alignment.CENTRE);
            format1.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN);
            // 把垂直对齐方式指定为居中 
            format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
            // 把水平对齐方式指定为居中 
            format2.setAlignment(jxl.format.Alignment.CENTRE);
            // 把垂直对齐方式指定为居中 
            format2.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
            format2.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN);
            // 把水平对齐方式指定为居中 
            format3.setAlignment(jxl.format.Alignment.CENTRE);
            // 把垂直对齐方式指定为居中 
            format3.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
            //设置边框;  
            format3.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN);
            WritableFont NormalFont = new WritableFont(WritableFont.ARIAL, 10);
            WritableFont BoldFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.BOLD);
            //给sheet电子版中所有的列设置默认的列的宽度;  
            sheet.getSettings().setDefaultColumnWidth(32);
            sheet.getSettings().setDefaultRowHeight(300);
            //设置背景颜色;  
            //format1.setBackground(Colour.DARK_BLUE2);  
            //format2.setBorder(Border.ALL, BorderLineStyle.DASH_DOT);
            /** ************以下设置三种单元格样式,灵活备用************ */
            // 用于标题居中
            WritableCellFormat wcf_center = new WritableCellFormat(BoldFont);
            wcf_center.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条
            wcf_center.setVerticalAlignment(VerticalAlignment.CENTRE); // 文字垂直对齐
            wcf_center.setAlignment(Alignment.CENTRE); // 文字水平对齐
            wcf_center.setWrap(true); // 文字是否换行

            // 用于正文居左
            WritableCellFormat wcf_left = new WritableCellFormat(NormalFont);
            wcf_left.setBorder(jxl.format.Border.NONE, BorderLineStyle.MEDIUM); // 线条
            wcf_left.setVerticalAlignment(VerticalAlignment.CENTRE); // 文字垂直对齐
            wcf_left.setWrap(false); // 文字是否换行
            wcf_left.setAlignment(Alignment.LEFT);
            List<Label>labelList=new ArrayList<Label>();
            //表头
            // 第一个参数代表列 ,第二个参数代表行
            sheet.mergeCells(0, 0, titleList.size()-1 ,0);   
            labelList.add(new Label(0,0, fileName,formatTable));
            sheet.setRowView( 0 , 800 );
            sheet.setRowView( 1 , 500 );
            for (int i = 0; i < titleList.size(); i++) {
                 Label label= new Label(i, 1, titleList.get(i)+"",format1);
                 labelList.add(label);
            }
            for (int i = 0; i < labelList.size(); i++) {
                sheet.addCell(labelList.get(i));
            }
            if(!list.isEmpty() && list != null){
            // 第4行第2列
            for (int i = 0; i < list.size(); i++) {
                Map<String, Object> map=list.get(i);
                for (int j = 0; j <paramList.size(); j++) {
                    Label label=new Label(j, i+2, map.get(paramList.get(j))+"",format2);
                    sheet.addCell(label);
                    
                }
                sheet.setRowView( i+2 , 450 );
            }
            for (int i = 0; i < paramList.size(); i++) {
                sheet.setColumnView( i , 30 );
            }
            }
                // 将格子放入工作簿中
            workbook.write();
            workbook.close();
            } catch (Exception e) {
                e.printStackTrace();
            } 
            // -------------------
            
            
            String fileName2= null;
            if(agent.contains("Firefox")){
                //火狐浏览器  base64的编码处理
                fileName2 = DownloadUtils.base64EncodeFileName(fileName+".xls");
            }else{
                //ie 或者谷歌浏览器URL编码处理
                fileName2=URLEncoder.encode(fileName+".xls","utf-8");
            }
            
            InputStream input = new BufferedInputStream(new FileInputStream(path+"/"+tempFileName+".xls"));  
            response.reset();// 清空输出流
            response.addHeader("Content-Disposition", "attachment;filename="  
                    + new String(fileName2.getBytes()));  
            response.addHeader("Content-Length", "" + new File(path+ "/"+tempFileName+".xls").length());  
            OutputStream out = new BufferedOutputStream(  
                    response.getOutputStream());  
            response.setContentType("application/vnd.ms-excel;charset=gb2312"); 
            int flag = 0;
            while ((flag = input.read()) != -1) {
                out.write(flag);
            }
            out.flush();
            out.close();
            input.close();
            if (temp.exists()&&temp.isFile()) {
                temp.delete();
            }
    }
}
 
  

 

 

 

转载于:https://www.cnblogs.com/penglan/p/8087050.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值