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

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;
    }
时间: 2024-10-07 14:57:57

jxl读数据库数据生成xls 并下载的相关文章

Java读取数据库数据生成柱状图

此案例是用swing显示数据的.需要引入jfreechart相关包,不同版本可能包不相同,本人用的是 此案例在ssi框架下会报错,不用框架就没问题. Java后台逻辑代码: public class BarChart { ChartPanel frame1; public BarChart() { CategoryDataset dataset = getDataSet(); JFreeChart chart = ChartFactory.createBarChart3D("水果",

access数据库在线生成xls电子表格

protected void Button1_Click(object sender, EventArgs e) { OleDbConnection conn = new OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=|datadirectory|***.mdb;"); conn.Open(); string sql = "select count(*) from m"; OleDbCom

nodejs实现,每天定时自动读取数据库数据-生成excel表格-发送给老板邮箱(promise版)

async版:http://blog.csdn.net/zzwwjjdj1/article/details/52129192 写这个版本主要是,promise比较好用,而且,现在已经是nodejs的内置对象了,无须再引用第三方库 -- 需要的工具 数据库    mysql 连接数据库模块 mysql  基本封装: http://blog.csdn.net/zzwwjjdj1/article/details/51991348 自动运行模块   node-schedule 基本使用 : http:/

MS SQLServer表数据生成Insert语句

关键词:SQLServer.表数据.生成Insert语句 反馈意见请联系:[email protected] 简介 数据库数据生成insert(MSSQL版),可将表中的数据生成insert或者update的sql脚本.比如您维护两个数据库,其中一个数据库中增加的数据也希望能够在另外一个数据中进行执行. 下载地址 下载地址:http://www.vidarsoft.cn/download/SQLInsert.zip Csdn下载地址:http://download.csdn.net/detail

Java千万级别数据生成文件思路和优化

一年前写过一个百万级别数据库数据生成配置xml文件的程序,程序目的是用来把数据库里面的数据生成xml文件.程序可以配置多少文件生成到一个文件中去. 程序刚开始设计的时候说的是最多百万级别数据,最多50W数据生成到一个xml文件里面去,所以在做测试的时候自己也只是造了100W的数据并没有做过多数据量的测试,然后问题就来了....由于程序使用的局点数据量巨大,需要生成xml文件的客户资料接近千万级别的程度,而现场对程序的配置大约是100W条数据生成一个xml文件里面去,程序在这样的大数据量下面偶尔会

django根据已有数据库表生成model类

django根据已有数据库表生成model类 创建一个Django项目 django-admin startproject 'xxxx' 修改setting文件,在setting里面设置你要连接的数据库类型和连接名称,地址之类,和创建新项目的时候一致 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'sqlexam', 'USER': 'root', 'PASSWORD': 'root123456'

Django-根据数据库表生成 model 类

根据数据库表生成 model 类 创建一个Django项目 django-admin startproject 'xxxx' 修改setting文件,在setting里面设置你要连接的数据库类型和连接名称,地址之类,和创建新项目的时候一致 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'sqlexam', 'USER': 'root', 'PASSWORD': 'root123456', 'HOS

### 根据数据库表生成 model 类

创建一个Django项目 django-admin startproject 'xxxx' 修改setting文件,在setting里面设置你要连接的数据库类型和连接名称,地址之类,和创建新项目的时候一致 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'sqlexam', 'USER': 'root', 'PASSWORD': 'root123456', 'HOST': '127.0.0.1',

效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】) 转

效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中[附源代码下载])  本文目录: (一)背景 (二)数据库数据导入到Excel的方法比较   (三)SSIS的简介   (四)数据库中存储过程示例(SSIS应用需要) (五)Excel模板的制作(这步这么简单,稍微介绍一下)   (六)SSIS操作过程(生成Package,用来调用)(下一篇随笔将详细讲解制作Package包的过程,图片太多,篇幅过长,因此本文将直接采用生成的Package包进行