码迷,mamicode.com
首页 > 数据库 > 详细

jxl读数据库数据生成xls 并下载

时间:2016-05-09 12:34:49      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:

1、所需jar

jxl-2.6.10.jar

jxls-core-1.0-RC-3.jar

jxls-reader-1.0-RC-3.jar

2、 excel修改行宽度封装

SheetColumn.java

package com.tp.soft.common.excel;

import jxl.write.WritableSheet;

/**
 * excel修改行宽度
 * @author taop
 *
 */
public interface SheetColumn {

    public abstract void setColumnView(WritableSheet sheet) ;
}

 

3、excel生成封装

ExcelExportUtils.java

package com.tp.soft.common.excel;

import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import jxl.CellView;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.VerticalAlignment;
import jxl.write.Label;
import jxl.write.WritableCell;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

import com.sun.xml.internal.messaging.saaj.packaging.mime.internet.MimeUtility;

/******************************************************************************
 * @Package:      [com.tp.soft.common.excel.java]  
 * @ClassName:    [XmlExportUtis]   
 * @Description:  [动态生成XML]   
 * @Author:       [taop]   
 * @CreateDate:   [2014-3-31 下午2:32:51]   
 * @UpdateUser:   [taop(如多次修改保留历史记录,增加修改记录)]   
 * @UpdateDate:   [2014-3-31 下午2:32:51,(如多次修改保留历史记录,增加修改记录)]   
 * @UpdateRemark: [说明本次修改内容,(如多次修改保留历史记录,增加修改记录)]  
 * @Version:      [v1.0] 
 */

public class ExcelExportUtils {
    /**
     * 
     * @Title: downLoad
     * @Description: TODO(导出EXCEL)
     * @param fileName 导出文件名
     * @param titles   excel标题
     * @param dataList excel数据
     * @param request  
     * @param response
     * @param sheetColumn void  设置 单元格宽度等信息
     * @throws
     */
    public static void downLoad(String fileName , 
            String[] titles , 
            Map<String,List<List<String>>> data ,
            HttpServletRequest request ,
            HttpServletResponse response , SheetColumn sheetColumn ){
        //创建一个EXCEL
        WritableWorkbook excel = null ;
        try {
            //设置类型为下载
            response.setContentType("application/x-msdownload");
            //获取浏览器信息
            String userAgent = request.getHeader("user-agent").toLowerCase();
            String rtn ="filename="+fileName+".xls" ;
            if (userAgent.indexOf("msie") != -1) { //IE浏览器
                rtn = "filename=" + java.net.URLEncoder.encode(fileName,"UTF-8")+".xls" ; 
            }else if (userAgent.indexOf("opera") != -1) { // Opera浏览器只能采用filename* 
                rtn = "filename*=UTF-8‘‘" + fileName+".xls"; 
            }else if (userAgent.indexOf("safari") != -1 ) { // Safari浏览器
                rtn = "filename=" + new String(fileName.getBytes("UTF-8"),"ISO8859-1")+".xls" ; 
            }else if (userAgent.indexOf("applewebkit") != -1 ){ // Chrome浏览器
                  fileName = MimeUtility.encodeText(fileName, "UTF8", "B"); 
                  rtn = "filename=\"" + fileName + ".xls\""; 
            }else if (userAgent.indexOf("mozilla") != -1){ // FireFox浏览器
                  rtn = "filename=" + new String(fileName.getBytes("UTF-8"),"ISO-8859-1")+".xls"; 
            } 
            //设置下载文件名
            response.setHeader("Content-Disposition","attachment;"+ rtn);
            //设置窗口弹出类型
            response.setHeader("windows-Target","_blank");
            
            excel = Workbook.createWorkbook(response.getOutputStream());
            WritableFont font = new WritableFont(WritableFont.TIMES,14,WritableFont.BOLD);
            WritableCellFormat format = new WritableCellFormat();
            //设置文字居中
            format.setAlignment(Alignment.CENTRE);
            //设置文字垂直居中
            format.setVerticalAlignment(VerticalAlignment.CENTRE);
            //设置自动换行
            format.setWrap(true);
            
            WritableCellFormat formatT = new WritableCellFormat(font);
            //设置文字居中
            formatT.setAlignment(Alignment.CENTRE);
            //设置文字垂直居中
            formatT.setVerticalAlignment(VerticalAlignment.CENTRE);
            //设置自动换行
            formatT.setWrap(true);
            
            int k = 0 ;
            for(Map.Entry<String, List<List<String>>> entry : data.entrySet()) {
                //创建工作空间
                WritableSheet sheet = excel.createSheet(entry.getKey(), k++);
                
                //设置宽度
                if(sheetColumn!=null){
                    sheetColumn.setColumnView(sheet);
                }else{
                    //设置自动大小 
                    CellView cellView = new CellView(); 
                    cellView.setAutosize(true); 
                    for(int i= 0 ; i<titles.length ; i++){
                        sheet.setColumnView(i, cellView);
                    }
                }
                
                
                List<List<String>> dataList  = entry.getValue() ;
                /*
                 * 添加title 
                 */
                for(int i= 0 ; i<titles.length ; i++){
                    WritableCell cell= new Label(i , 0 ,titles[i],formatT);
                    sheet.addCell(cell);
                }
                /*
                 * 添加内容 
                 */
                for(int j=0 ; j<dataList.size() ; j++){
                    List<String> contents = dataList.get(j) ; //一条数据
                    for(int i=0 ; i<contents.size() ; i++) {
                        WritableCell cell= new Label(i , j+1 ,contents.get(i),format);
                        sheet.addCell(cell);
                    }
                }
            }
            excel.write() ;
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            try{
                if(excel!=null) excel.close();
                excel = null ;
            }catch(Exception e){
                
            }
        }
    }
    
    
}

4、读取数据库数据并调用生成excel 下载

    /**
     * 导出中奖记录
     * */
    @RequestMapping("/doWinExcel")
    public ModelAndView download(BuWinUser buWinUser, int zid,
            HttpServletResponse response) throws Exception {

        List<BuWinUser> winList = winUserSvc
                .findWinListByNoPage(buWinUser, zid);
        Map<String, List<List<String>>> data = new HashMap<String, List<List<String>>>();

        data.put("获奖用户信息", beanToArray(winList));

        String[] titles = { "编号", "状态", "兑换码", "openid", "奖项", "昵称", "联系电话",
                "性别", "中奖时间", "发奖时间" };

        ExcelExportUtils.downLoad("获奖用户信息", titles, data, request, response,
                new SheetColumn() {
                    @Override
                    public void setColumnView(WritableSheet sheet) {
                        sheet.setColumnView(0, 15);
                        sheet.setColumnView(1, 20);
                        sheet.setColumnView(2, 20);
                        sheet.setColumnView(3, 40);
                        sheet.setColumnView(4, 20);
                        sheet.setColumnView(5, 20);
                        sheet.setColumnView(6, 30);
                        sheet.setColumnView(7, 30);
                        sheet.setColumnView(8, 20);
                        sheet.setColumnView(9, 20);
                    }
                });
        return null;

    }

    private List<List<String>> beanToArray(List<BuWinUser> data) {
        List<List<String>> dataList = new ArrayList<List<String>>();
        for (BuWinUser winUser : data) {
            List<String> list = new ArrayList<String>();
            list.add(winUser.getWid() + "");
            list.add(winUser.getIssend_name());
            list.add(winUser.getSn_num());
            list.add(winUser.getOpenid());
            list.add(winUser.getPlevel_name());
            list.add(winUser.getNick_name());
            list.add(winUser.getTel());
            list.add(winUser.getSex());
            list.add(DateUtil.timestampToStr(winUser.getGmt_create(),
                    "yyyy-MM-dd HH:mm:ss"));
            list.add(DateUtil.timestampToStr(winUser.getSend_time(),
                    "yyyy-MM-dd HH:mm:ss"));

            dataList.add(list);
        }
        return dataList;
    }

 

jxl读数据库数据生成xls 并下载

标签:

原文地址:http://www.cnblogs.com/tplovejava/p/5473292.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!