用POI创建Excel文件及下载

POIExcelUtils.java:

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

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

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import com.saicfc.pmpf.common.enums.ChannelCodeEnums;

/**
 * @author lizhiyong
 * @version $Id: POIExcelUtils.java, v 0.1
		2014年9月18日 上午9:28:30 Exp $
 */
public class POIExcelUtils {

    /**
     * 定制日期格式
     */
    private static String       DATE_FORMAT    = "yyyy-MM-dd HH:mm:ss";

    /**
     * 定制浮点数格式
     */
    private static String       NUMBER_FORMAT  = "#,##0.00";

    /**
     * 定制百分比格式
     */
    private static String       PRECENT_FORMAT = "0.00%";

    private static HSSFWorkbook workbook       = new HSSFWorkbook();

    private static HSSFSheet    sheet          = workbook.createSheet();

    private static HSSFRow      row;

    /**
     * 导出Excel文件
     * @param filePath
     * @throws IOException
     */
    public static void exportXLS(String filePath) throws IOException {
        try {
            FileOutputStream fOut = new FileOutputStream(filePath);
            workbook.write(fOut);
            fOut.flush();
            fOut.close();
        } catch (IOException e) {
            e.getStackTrace();
        }
    }

    /**
     * 导出Excel文件
     * @param file
     * @throws IOException
     */
    public static void exportXLS(File file) throws IOException {
        try {
            FileOutputStream fOut = new FileOutputStream(file);
            workbook.write(fOut);
            fOut.flush();
            fOut.close();
        } catch (IOException e) {
            e.getStackTrace();
        }
    }

    /**
     * 增加一行
     *  @param index 行号
     */
    public static void createRow(int index) {
        row = sheet.createRow(index);
    }

    /**
     * 设置单元格的字符值格式
     * @param index  列号
     * @param value  单元格填充的值
     */
    public static void setStringCell(int index, String value) {
        HSSFCell cell = row.createCell(index);
        cell.setCellValue(value);
        cell.setCellType(HSSFCell.CELL_TYPE_STRING);
    }

    /**
     * 设置单元格日期格式
     *  @param index 列号
     *  @param value 单元格填充值
     */
    public static void setDateCell(int index, Calendar value) {
        HSSFCell cell = row.createCell(index);
        cell.setCellValue(value.getTime());
        //建立新的cell样式
        HSSFCellStyle cellStyle = workbook.createCellStyle();
        HSSFDataFormat format = workbook.createDataFormat();
        //设置cell样式为定制的日期格式
        cellStyle.setDataFormat(format.getFormat(DATE_FORMAT));
        //居中
        cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        //设置该cell日期的显示格式
        cell.setCellStyle(cellStyle);
    }

    /**
     * 设置单元格整数數值格式
     *  @param index 列号
     *  @param value 单元格填充值
     */
    public static void setIntCell(int index, int value) {
        HSSFCell cell = row.createCell(index);
        cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
        cell.setCellValue(value);
    }

    /**
     * 设置单元格浮点数值格式
     *  @param index 列号
     *  @param value 单元格填充值
     */
    public static void setNumberCell(int index, double value) {
        HSSFCell cell = row.createCell(index);
        cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
        cell.setCellValue(value);
        //建立新的cell样式
        HSSFCellStyle cellStyle = workbook.createCellStyle();
        HSSFDataFormat format = workbook.createDataFormat();
        //设置cell样式为定制的浮点数格式
        cellStyle.setDataFormat(format.getFormat(NUMBER_FORMAT));
        //设置该cell浮点数的显示格式
        cell.setCellStyle(cellStyle);
    }

    /**
     * 设置单元格百分比格式
     * @param index  列号
     * @param value  单元格填充值
     */
    public static void setPercentCell(int index, double value) {
        HSSFCell cell = row.createCell(index);
        cell.setCellValue(value);
        //建立新的cell样式
        HSSFCellStyle cellStyle = workbook.createCellStyle();
        HSSFDataFormat format = workbook.createDataFormat();
        cellStyle.setDataFormat(format.getFormat(PRECENT_FORMAT));
        cell.setCellStyle(cellStyle);
    }

    public static void main(String[] args) {
        System.out.println(" 开始导出Excel文件 ");
        createRow(0);
        setStringCell(0, " 编号 ");
        setStringCell(1, " 名称 ");
        setStringCell(2, " 日期 ");
        setStringCell(3, " 金额 ");
        createRow(1);
        setIntCell(0, 1);
        setStringCell(1, " 工商银行 ");
        setDateCell(2, Calendar.getInstance());
        setNumberCell(3, 111123.99);
        createRow(2);
        setIntCell(0, 2);
        setStringCell(1, " 招商银行 ");
        setDateCell(2, Calendar.getInstance());
        setNumberCell(3, 222456.88);
        try {
            String filePath = "C:/lizhiyong.xls";
            exportXLS(filePath);
            System.out.println(" 导出Excel文件[成功] ");
        } catch (IOException e1) {
            System.out.println(" 导出Excel文件[失败] ");
            e1.printStackTrace();
        }
    }

    /**
     * 生成一个Excel文件POI
     * @param inputFile 输入模板文件路径
     * @param outputFile 输入文件存放于服务器路径
     * @param dataList 待导出数据
     * @throws Exception
     */
    @SuppressWarnings("rawtypes")
    public static File exportExcelFile(String channelCode, String filePath, List titleList,
                                       List dataList, String fileName) throws Exception {
        File file = new File(filePath);
        if (!file.exists()) {
            file.mkdir();
            System.out.println("文件夹已创建");
        }
        if (ChannelCodeEnums.PINGAN.getChannelCode().equals(channelCode)) {
            //设置列宽
            sheet.setColumnWidth(0, 5000);
            sheet.setColumnWidth(1, 4000);
            sheet.setColumnWidth(2, 8000);
        }
        //定义文件名格式并创建
        File excelFile = File.createTempFile(fileName, ".xls", new File(filePath));
        //添加头信息
        int row = 0;
        for (Iterator iterator = titleList.iterator(); iterator.hasNext();) {
            LinkedHashMap titleMap = (LinkedHashMap) iterator.next();
            //新增一行
            createRow(row);
            int cell = 0;
            for (Iterator titleIterator = titleMap.entrySet().iterator(); titleIterator.hasNext();) {
                java.util.Map.Entry titleEntry = (java.util.Map.Entry) titleIterator.next();
                //向列中添加值
                setStringCell(cell, (String) titleEntry.getValue());
                cell++;
            }
            row++;
        }

        //下面开始添加单元格信息
        int rows = titleList.size();
        for (Iterator iterator = dataList.iterator(); iterator.hasNext();) {
            LinkedHashMap dataMap = (LinkedHashMap) iterator.next();
            //新增一行
            createRow(rows);
            int cells = 0;
            for (Iterator dataIterator = dataMap.entrySet().iterator(); dataIterator.hasNext();) {
                java.util.Map.Entry dataEntry = (java.util.Map.Entry) dataIterator.next();
                if (ChannelCodeEnums.PINGAN.getChannelCode().equals(channelCode)) {
                    if ("refChannelOrderNo".equals(dataEntry.getKey())) {
                        //向列中添加值
                        setStringCell(cells, (String) dataEntry.getValue());
                    } else if ("amount".equals(dataEntry.getKey())) {
                        //向列中添加浮点型数值
                        setNumberCell(cells, Double.parseDouble((String) dataEntry.getValue()));
                    } else {
                        //向列中添加值
                        setStringCell(cells, (String) dataEntry.getValue());
                    }
                } else {
                    //向列中添加值
                    setStringCell(cells, (String) dataEntry.getValue());
                }
                cells++;
            }
            rows++;
        }

        exportXLS(excelFile);
        return excelFile;
    }
}

下面是调用:

 String fileName = "平安银行(PINGAN)退款数据";
 List titleList = new ArrayList();
 LinkedHashMap titleMap = new LinkedHashMap();
 titleMap.put("title1", "订单号");
 titleMap.put("title2", "退款金额");
 titleMap.put("title3", "退款原因");
 titleList.add(0, titleMap);
 File file;
 try {
    file = POIExcelUtils.exportExcelFile(channelCode, filePath, titleList, exportData,
                    fileName);
    //下载文件
    downLoadFile(response, filePath, file);
  } catch (Exception e) {
    log.error("下载失败", e);
}
  /**
     * 下载文件
     * @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;
                    }
                }
            }
        }
    }
}
时间: 2024-11-05 22:00:04

用POI创建Excel文件及下载的相关文章

【原创】POI 生成Excel文件并下载

ι 版权声明:本文为博主原创文章,未经博主允许不得转载. 效果图: 实现 1.在pom中添加依赖: <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</versio

java使用poi创建excel文件

import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.poifs.filesystem.POIFSFileSystem; 注:此方法创

使用poi创建Excel文件

通过Poi操作Excel十分方便,将一个Excel抽象为一个Workbook,一个表单页抽象为Sheet,表单中的一行抽象为Row,一行中的一个单元格可以抽象为Cell.HSSF对应的是97-03格式(.xls),XSSF对应的是07格式的(.xlsx). Workbook的获取有以下几种方式: 1.可以通过WorkbookFactory,工厂方法 Workbook wb=WorkbookFactory.create(new FileInputStream(file));//可以读取xls格式或

poi创建excel文件

package com.mozq.sb.file01.test; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.ss.usermodel.*; import java.io.FileOutputStream; import java.io.IOException; import java.util.*; public class Ex

java使用POI操作excel文件,实现批量导出,和导入

一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Excel 95及以后的版本,即可操作后缀为 .xls 和 .xlsx两种格式的excel. POI全称 Poor Obfuscation Implementation,直译为"可怜的模糊实现",利用POI接口可以通过JAVA操作Microsoft office 套件工具的读写功能.官网:htt

java使用Apache POI操作excel文件

官方介绍 HSSF is the POI Project's pure Java implementation of the Excel '97(-2007) file format. XSSF is the POI Project's pure Java implementation of the Excel 2007 OOXML (.xlsx) file format. 从官方文档中了解到:POI提供的HSSF包用于操作 Excel '97(-2007)的.xls文件,而XSSF包则用于操作

java使用POI实现excel文件的读取,兼容后缀名xls和xlsx

需要用的jar包如下: 如果是maven管理的项目,添加依赖如下: <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.14</version> </depen

(5) 如何用Apache POI操作Excel文件-----发现Apache的POI的Bug后,如何给Apache的POI报Bug?

在我上篇文章中,(4) 如何用Apache POI操作Excel文件-----发现了POI-3.12一个回归,通过测试POI-3.12的版本,我发现了一个bug,那么发现bug后,该如何处理.我们有2种处理方式,首先我们到Apache POI的bug库里面搜索,看别人有没有创建类似的bug,如果有创建的,这个是最好的结果,我们只需要关注这个bug什么时候被修复.如果没有搜索不到,这个时候我们就需要给Apache POI报bug了.那么,如何给Apache报Bug? 第一步: 打开https://

jxl创建Excel文件java代码示例

记得要下载 并 导入 jxl.jar 包,免积分下载地址:http://download.csdn.net/detail/u010011052/7561041 package Test; import java.io.*; import jxl.*; import jxl.format.Colour; import jxl.write.*; public class JXLTest { private static WritableWorkbook book; private static Wr