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