导出excel文件工具类
package com.rrz.common.utils.excel;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class ExportExcelUtils {
public static <T> HSSFWorkbook export(HttpServletResponse response, String fileName, String[] excelHeader,
Collection<T> dataList) throws NoSuchMethodException, SecurityException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException, IOException {
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
response.setHeader("Content-disposition",
"attachment;filename=" + URLEncoder.encode(fileName + ".xls", "UTF-8"));
HSSFWorkbook wb = new HSSFWorkbook();
HSSFCellStyle titleStyle = titleStyle(wb);
HSSFSheet sheet = wb.createSheet(fileName);
String[] titleArray = new String[excelHeader.length];
String[] fieldArray = new String[excelHeader.length];
for (int i = 0; i < excelHeader.length; i++) {
String[] tempArray = excelHeader[i].split("#");
titleArray[i] = tempArray[0];
fieldArray[i] = tempArray[1];
}
HSSFRow row = sheet.createRow((int) 0);// 行数从0开始
HSSFCell seqCell = row.createCell(0);// cell列 从0开始 第一列添加序号
seqCell.setCellValue("序号");
seqCell.setCellStyle(titleStyle);
sheet.autoSizeColumn(0);// 自动设置宽度
for (int i = 0; i < titleArray.length; i++) {
HSSFCell titleCell = row.createCell(i + 1);
titleCell.setCellValue(titleArray[i]);
titleCell.setCellStyle(titleStyle);
sheet.autoSizeColumn(i + 1);
}
HSSFCellStyle dataStyle = dataStyle(wb);
Iterator<T> it = dataList.iterator();
int index = 0;
while (it.hasNext()) {
index++;
row = sheet.createRow(index);
HSSFCell sequenceCellValue = row.createCell(0);
sequenceCellValue.setCellValue(index);
sequenceCellValue.setCellStyle(dataStyle);
sheet.autoSizeColumn(0);
T t = (T) it.next();
for (int i = 0; i < excelHeader.length; i++) {
HSSFCell dataCell = row.createCell(i + 1);
dataCell.setCellStyle(dataStyle);
sheet.autoSizeColumn(i + 1);
String fieldName = fieldArray[i];
boolean flag = false;
if (fieldName.equals("roleFlag") || fieldName.equals("authStatus")) {
flag = true;
}
String getMethodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);// 取得对应getXxx()方法
Class<? extends Object> tCls = t.getClass();// 泛型为Object以及所有Object的子类
Method getMethod = tCls.getMethod(getMethodName, new Class[] {});// 通过方法名得到对应的方法
Object value = getMethod.invoke(t, new Object[] {});// 动态调用方,得到属性值
if (value != null) {
if (value instanceof Date) {
value = dateToStrLong((Date) value);
}
if (flag) {
if (value.toString().equals("1")) {
dataCell.setCellValue("是");
} else {
dataCell.setCellValue("否");
}
} else {
dataCell.setCellValue(value.toString());// 为当前列赋值
}
} else {
if (flag) {
dataCell.setCellValue("否");
}
}
}
}
OutputStream outputStream = response.getOutputStream();
wb.write(outputStream);
outputStream.flush();
outputStream.close();
return wb;
}
private final static HSSFCellStyle titleStyle(HSSFWorkbook wb) {
HSSFCellStyle titleStyle = wb.createCellStyle();
titleStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);// 上边框 细边线
titleStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);// 下边框 细边线
titleStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 左边框 细边线
titleStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);// 右边框 细边线
// 设置单元格对齐方式
titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平居中
titleStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 垂直居中
// 设置字体样式
HSSFFont titleFont = wb.createFont();
titleFont.setFontHeightInPoints((short) 15); // 字体高度
titleFont.setFontName("黑体"); // 字体样式
titleStyle.setFont(titleFont);
return titleStyle;
}
private final static HSSFCellStyle dataStyle(HSSFWorkbook wb) {
HSSFCellStyle dataStyle = wb.createCellStyle();
dataStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
dataStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
dataStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
dataStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
// 设置居中样式
dataStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平居中
dataStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 垂直居中
// 设置数据字体
HSSFFont dataFont = wb.createFont();
dataFont.setFontHeightInPoints((short) 12); // 字体高度
dataFont.setFontName("宋体"); // 字体
dataStyle.setFont(dataFont);
return dataStyle;
}
public static String dateToStrLong(Date dateDate) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(dateDate);
return dateString;
}
}
相关文章
- postman 测试Excel文件导入导出功能
- C# Microsoft.Office.Interop.Owc11 导出excel文件
- excel导出功能优化
- 解决 Mac Pro 用 Excel 打开 CSV 文件不能正常显示的问题
- Python导出DBF文件到Excel的方法
- C#.net word excel powerpoint (ppt) 转换成 pdf 文件
- 使用JavaScript把页面上的表格导出为Excel文件[转]
- Matlab 读取excel文件提示服务器出现意外情况或无法读取问题解决
- Python导出DBF文件到Excel的方法
- java读取Excel文件
- [LeetCode] Excel Sheet Column Number
- Python 帮同事用pandas快速筛选Excel文件
- [转] C#操作Excel文件
- 148. SAP UI5 表格数据如何导出成 Excel 文件(Table Export As Excel)
- SAP 系统里的中文数据,用 ABAP 导出成 Excel 文件时遇到乱码的分析和解决办法试读版
- 将 SAP ABAP 内表内容本地导出成 Excel 文件试读版
- atitit.导出excel的设计----查询结果 导出为excel的实现java .net php 总结
- piap.excel 微软 时间戳转换mssql sql server文件时间戳转换unix 导入mysql
- 92行JavaScript代码实现的类似Excel外观的UI
- java JXL操作Excel文件
- Wps:wps中excel表格数据整理常用技巧—利用wps表格实现自动填充等差数列然后预测数值、将python语言中的列表格式数据存为excel内
- Java:apache.poi读写Excel文件
- java.util.zip包 OutputStream ZipOutputStream以压缩包的方式导出或下载多个文件,比如图片,文档,Excel表格等
- C#里使用NPOI创建EXCEL文件的简单方法
- Python笔记:使用pywin32处理excel文件
- 如何找回未保存过的 Excel 文件?
- 玩转excel===Excel处理txt文件中的数据,Excel中的分列处理
- JAVA操作Excel表格:方法二:POI的使用②:Excel实战之POI解析读取excel文件(低版本)
- 基于流的EXCEL文件导出,SXSSFWorkbook源码解析
- java用XSSFWorkbook实现读写Excel
- 使用jQuery OCUpload实现excel文件一键上传功能