首页 > 代码库 > java生成Ecxel文件及下载(公用)

java生成Ecxel文件及下载(公用)

/** 
 * 上海汽车集团财务有限责任公司
 * Copyright (c) 1994-2014 All Rights
		Reserved. 
 */
package com.saicfc.pmpf.internal.manage.utils;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;

import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

/** 
 * Excel文件生成器
 * @author lizhiyong
 * @version $Id: ExcelUtils.java, v 0.1
		2014年9月11日 下午5:27:18 Exp $ 
 */
public class ExcelUtils {

    /**
     * 生成一个Excel文件 jxl
     * @param filePath  要生成的Excel文件的路径
     * @param titleList 要生成的Excel文件的头信息
     * @param dataList  要生成的Excel文件的详细信息
     * @param fileName  要生成的Excel文件名
     * @param sheetName  要生成的sheet文件名
     * @return  excelFile
     */
    @SuppressWarnings("rawtypes")
    public static File writeExcel(String filePath, List titleList, List dataList, String fileName,
                                  String sheetName) {
        WritableWorkbook wwb = null;
        File excelFile = null;
        try {
            File file = new File(filePath);
            if (!file.exists()) {
                file.mkdir();
                System.out.println("文件夹已创建");
            }
            // 新建立一个jxl文件  
            //定义文件名格式并创建
            excelFile = File.createTempFile(fileName, ".xls", new File(filePath));
            //首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象 
            wwb = Workbook.createWorkbook(excelFile);
            if (wwb != null) {
                //创建一个可写入的工作表 
                //Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置 
                WritableSheet ws = wwb.createSheet(sheetName, 0);

                //添加头信息
                int row = 0;
                for (Iterator iterator = titleList.iterator(); iterator.hasNext();) {
                    LinkedHashMap titleMap = (LinkedHashMap) iterator.next();
                    int cell = 0;
                    for (Iterator titleIterator = titleMap.entrySet().iterator(); titleIterator
                        .hasNext();) {
                        java.util.Map.Entry titleEntry = (java.util.Map.Entry) titleIterator.next();
                        //这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行 
                        ws.addCell(new jxl.write.Label(cell, row, (String) titleEntry.getValue()));
                        cell++;
                    }
                    row++;
                }

                //下面开始添加单元格信息 
                int rows = titleList.size();
                for (Iterator iterator = dataList.iterator(); iterator.hasNext();) {
                    LinkedHashMap dataMap = (LinkedHashMap) iterator.next();
                    int cells = 0;
                    for (Iterator dataIterator = dataMap.entrySet().iterator(); dataIterator
                        .hasNext();) {
                        java.util.Map.Entry dataEntry = (java.util.Map.Entry) dataIterator.next();
                        //这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行 
                        //将生成的单元格添加到工作表中 
                        ws.addCell(new jxl.write.Label(cells, rows, (String) dataEntry.getValue()));
                        cells++;
                    }
                    rows++;
                }
                //从内存中写入文件中 
                wwb.write();
                //关闭资源,释放内存 
                wwb.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (RowsExceededException e) {
            e.printStackTrace();
        } catch (WriteException e) {
            e.printStackTrace();
        }
        return excelFile;
    }
}

下面是调用:

String fileName = "中信银行(CITIC)退款数据";
            String sheetName = "中信银行(CITIC)退款数据";
            List titleList = new ArrayList();
            LinkedHashMap titleMap = new LinkedHashMap();
            titleMap.put("fileType", "文件类型:");
            titleMap.put("fileType1", "FTB2CBatchPayback");
            titleList.add(0, titleMap);

            LinkedHashMap titleMap2 = new LinkedHashMap();
            titleMap2.put("fileTitle", "标题:");
            titleMap2.put("fileTitle1", "退款批量");
            titleList.add(1, titleMap2);
            titleList.add(2, new LinkedHashMap());
            titleList.add(3, new LinkedHashMap());

            LinkedHashMap titleMap3 = new LinkedHashMap();
            titleMap3.put("title1", "原支付订单号");
            titleMap3.put("title2", "原支付订单日期");
            titleMap3.put("title3", "退款金额");
            titleMap3.put("title4", "摘要");
            titleList.add(4, titleMap3);
            //创建文件
            File file = ExcelUtils.writeExcel(filePath, titleList, exportData, fileName, sheetName);
            //下载文件
            downLoadFile(response, filePath, file);

    /**
     * 下载文件
     * @param response
     * @param filePath  文件路径
     * @param file   文件
     * @throws IOException
     */
    public void downLoadFile(HttpServletResponse response, String filePath, File file)
                                                                                      throws IOException {
        String fileName = file.getName();
        //下载文件
        FileManageUtils.exportFile(response, filePath + fileName, fileName);
        //删除单个文件
        FileManageUtils.deleteFile(filePath, fileName);
    }

package com.saicfc.pmpf.internal.manage.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.servlet.http.HttpServletResponse;

/**
 * 文件管理
 * @author lizhiyong
 * @version $Id: FileManageUtils.java, v 0.1
		2014年9月11日 上午9:37:47 Exp $
 */
public class FileManageUtils {

    /**
     * 下载文件
     * @param response
     * @param csvFilePath
     *              文件路径
     * @param fileName
     *              文件名称
     * @throws IOException
     */
    public static void exportFile(HttpServletResponse response, String csvFilePath, String fileName)
                                                                                                    throws IOException {
        response.setContentType("application/csv;charset=GBK");
        response.setHeader("Content-Disposition",
            "attachment;  filename=" + new String(fileName.getBytes("GBK"), "ISO8859-1"));
        //URLEncoder.encode(fileName, "GBK")

        InputStream in = null;
        try {
            in = new FileInputStream(csvFilePath);
            int len = 0;
            byte[] buffer = new byte[1024];
            response.setCharacterEncoding("GBK");
            OutputStream out = response.getOutputStream();
            while ((len = in.read(buffer)) > 0) {
                //out.write(new byte[] { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF });
                out.write(buffer, 0, len);
            }
        } catch (FileNotFoundException e) {
            System.out.println(e);
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }

    /**
     * 删除该目录filePath下的所有文件
     * @param filePath
     *            文件目录路径
     */
    public static void deleteFiles(String filePath) {
        File file = new File(filePath);
        if (file.exists()) {
            File[] files = file.listFiles();
            for (int i = 0; i < files.length; i++) {
                if (files[i].isFile()) {
                    files[i].delete();
                }
            }
        }
    }

    /**
     * 删除单个文件
     * @param filePath
     *         文件目录路径
     * @param fileName
     *         文件名称
     */
    public static void deleteFile(String filePath, String fileName) {
        File file = new File(filePath);
        if (file.exists()) {
            File[] files = file.listFiles();
            for (int i = 0; i < files.length; i++) {
                if (files[i].isFile()) {
                    if (files[i].getName().equals(fileName)) {
                        files[i].delete();
                        return;
                    }
                }
            }
        }
    }
}


java生成Ecxel文件及下载(公用)