导出Excel的工具类
调用实例 | 说明 |
---|---|
exportByLocal(List<Bean>,{"id","name","age"}, "exp001") | 从本地运行导出 |
exportByServer(resp,List<Bean>,{"id","name","age"}, "exp001") | 从servlet服务器下载 |
Java本地上运行
/**
* 从本地上运行(默认保存在C盘 c:/export/)
* @param list 封装实体类数据的集合
* @param titles 表头的标题行
* @param filename 生成的文件名
* @param <T> 泛型
* @throws Exception
*/
public static <T> void exportByLocal(
List<T> list, String[] titles, String filename) throws Exception {
Workbook workbook = exportData(null,list,titles,filename);
workbook.write(new FileOutputStream("c:/export/"+filename+".xlsx"));
workbook.close();
}
在servlet上运行,浏览器访问下载
/**
* 从服务器上运行
* @param resp 相应浏览器的对象
* @param list 封装实体类数据的集合
* @param titles 表头的标题行
* @param filename 生成的文件名
* @param <T> 泛型
* @throws Exception
*/
public static <T> void exportByServer(
HttpServletResponse resp, List<T> list, String[] titles, String filename) throws Exception {
Workbook workbook = exportData(resp,list,titles,filename);
//3. 导出,下载
String fileName = URLEncoder.encode(filename+".xlsx","UTF-8");
//3.1 设置编码
resp.setCharacterEncoding("UTF-8");
//3.2 获取resposne输出流
ServletOutputStream out = resp.getOutputStream();
//3.3 设置下载响应头
resp.setHeader("content-disposition","attachment;fileName=" + fileName);
//3.4 导出
workbook.write(out);
workbook.close();
}
依赖的方法
//从网页中导出execl表格
private static <T> Workbook exportData(
HttpServletResponse resp, List<T> list, String[] titles, String filename) throws Exception {
try {
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("test");
Row row = sheet.createRow(0);
for (int i=0; i<titles.length ;i++){
row.createCell(i).setCellValue(titles[i]);
}
//记录行数
int index = 1;
//遍历List<Bean>所有变量
for (T classObject : list) {
//遍历获取list的每个bean对象
row = sheet.createRow(index++);
//记录列数
int cellindex = 0;
Class<? extends T> clazz = (Class<? extends T>) classObject.getClass();
//获取实体类对象下所有修饰的变量
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
Object key = field.getName(); //变量的名称
Object val = field.get(classObject); //变量的对应的值
System.out.println(key + "=" + val);
row.createCell(cellindex++).setCellValue(val == null ? "" : val.toString());
}
}
return workbook;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}