使用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 输入文件存放于server路径
* @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;
}
}
}
}
}
}
版权声明:本文博客原创文章,博客,未经同意,不得转载。
使用POI创建Excel文件下载的更多相关文章
- Java Struts2 POI创建Excel文件并实现文件下载
Java Struts2 POI创建Excel文件并实现文件下载2013-09-04 18:53 6059人阅读 评论(1) 收藏 举报 分类: Java EE(49) Struts(6) 版权声明: ...
- Struts2使用POI创建Excel并下载
本文将讲解在Struts2框架下如何使用POI创建Office Excel文档并实现下载功能. Apache POI ,操作微软文档的Java API,简单来说就是可以用来操作Office文档的API ...
- java使用poi创建excel文件
import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFRow;import or ...
- java POI创建Excel示例(xslx和xsl区别 )
Java用来处理office类库有很多,其中POI就是比较出名的一个,它是apache的类库,现在版本到了3.10,也就是2014年2月8号这个版本. 在处理PPT,Excel和Word前,需要导入以 ...
- POI创建Excel使用的常见的属性
public static void main(String[] args) { //创建新的Excel 工作簿 HSSFWorkbook workbook =new HSSFWorkbook(); ...
- poi创建excel文件
package com.mozq.sb.file01.test; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.hssf. ...
- poi 创建excel数据
public static void main(String[] args) throws Exception { // TODO 设置excel的标题 List<String> exce ...
- Java通过poi创建Excel文件并分页追加数据
以下的main函数,先生成一个excel文件,并设置sheet的名称,设置excel头:而后,以分页的方式,向文件中追加数据 maven依赖 <dependency> <groupI ...
- 使用Apache下poi创建和读取excel文件
一:使用apache下poi创建excel文档 @Test /* * 使用Apache poi创建excel文件 */ public void testCreateExcel() { // 1:创建一 ...
随机推荐
- 宣布 Windows Azure 通过 PCI DSS 合规性验证并且 ISO 认证范围扩大,同时正式发布 Windows Azure Hyper-V 恢复管理器和其他更新功能
今天,我们高兴地宣布两个重大里程碑事件,客户将能借此提高基于 Windows Azure 构建安全且合规的应用程序的能力.此外,我们还宣布正式发布 Windows Azure Hyper-V 恢复管理 ...
- HDU 4741 Save Labman No.004 2013 ACM/ICPC 杭州网络赛
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4741 题意:给你两条异面直线,然你求着两条直线的最短距离,并求出这条中垂线与两直线的交点. 需要注意的是 ...
- 第三种:NSOperationQueue
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typica ...
- Binary Tree(二叉树+思维)
Binary Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Tota ...
- 浅谈独立使用NDK编译库文件(Android)
阅读前准备 这是一篇相对入门的文章.文中会涉及到少许NDK的知识,但个人认为对初学者来说都相对比较实用,因为都是在平时项目中遇到的(目前自己也是初学者).一些其他高深的技术不再本文探讨范围之内(因为我 ...
- Ext JS学习第五天 我们所熟悉的javascript(四)
此文用来记录学习笔记: •javascript之对象.面向对象 •可能对于高级语言你可能了解甚至精通OOP面向对象,那么对于javascript你又熟悉多少呢?我们一起来学习javascript面向对 ...
- java读取远程url图片,得到宽高
链接地址:http://blog.sina.com.cn/s/blog_407a68fc0100nrb6.html import java.io.IOException;import java.awt ...
- Group DataList
一,效果图. 二,源代码. <!DOCTYPE html><html><head> <meta charset="UTF-8"> & ...
- <climits>头文件使用方法
<climits>头文件定义的符号常量 CHAR_MIN char的最小值SCHAR_MAX signed char 最大值SCHAR_MIN signed char 最小值UCH ...
- 【.Net基础拾遗】品味OO继承
0X1 引言 提起面向对象,每个人都有不同的见解.但提的最多的无非就是:对象.封装.继承.多态.差不多就是这些元素构成了面向对象设计开发的基本逻辑.面向对象编程,“对象”指的是什么?这里的" ...