使用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:创建一 ...
随机推荐
- Oracle Database 12c Release 1 Installation On Oracle Linux 6.4 x86_64
Create groups and users [root@vmdb12c ~]# groupadd oinstall [root@vmdb12c ~]# groupadd dba [root@vmd ...
- Oracle 11g RAC 环境下单实例非缺省监听及端口配置
如果在Oracle 11g RAC环境下使用dbca创建单实例数据库后,Oracle会自动将其注册到缺省的1521端口及监听器.大多数情况下我们使用的为非缺省监听器以及非缺省的监听端口.而且在Orac ...
- Phonegap-----Media
Everything in the code: <!DOCTYPE html> <html> <head> <title>Media Example&l ...
- 将其它图片格式转为.eps格式
假设是用origin的话就不存在这个问题. 倘若你是用excel绘图的话. 1.先将excel导出为.pdf文件 2.用Adobe Acrobat Pro 打开pdf,用其它的pdf软件貌似不行 3. ...
- hdu3306 Another kind of Fibonacci【矩阵快速幂】
转载请注明出处:http://www.cnblogs.com/KirisameMarisa/p/4187670.html 题目链接:http://acm.hdu.edu.cn/showproblem. ...
- layout_weight属性详解
看到上面这段代码,大家肯定认为三个TextView的宽度是1:2:2,但实际上是如图1这样的,宽度之比确实是1:2:2,但为什么第一个和后两个是齐平的呢?下面我给大家画一条线,可以看到虽然控件是没有对 ...
- Spring通过AOP实现对Redis的缓存同步
废话不多说 说下思路:使用aop注解,在Service实现类添加需要用到redis的方法上,当每次请求过来则对其进行拦截,如果是查询则从redis进行get key,如果是update则删除key,防 ...
- 内联函数 inline
(一)inline函数(摘自C++ Primer的第三版) 在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联. inline int min(int first, int ...
- 浏览器hack总结 详细的浏览器兼容性解决方法
由于各浏览器对页面的解析不同,会导致页面在不同浏览器中显示的样式不一致,为了保持页面的统一,经常需要对浏览器进行兼容性问题的调试. CSS Hack 面对浏览器诸多的兼容性问题,经常需要通过CSS样式 ...
- Clojure学习03:数据结构(集合)
Clojure提供了几种强大的数据结构(集合) 一.集合种类 1.vector 相当于数组,如: [2 3 5] , ["ad" "adas" & ...