package com.xf.service;
import com.xf.service.ReportUtils;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.web.servlet.view.document.AbstractExcelView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* Excel 导出公用类
*
* @author Yan Jingchao
* 2014/4/2
*/
@SuppressWarnings({"unchecked"})
public class CommonExcelView extends AbstractExcelView {
/**
* @param params 传入参数 包含以下数据
* fileName String 文件名称
* titleCN String[] 导出excel表头中文
* titleMap Map<String, Object> excel表头与字段中名称的对应关系
* exportData List<Map>需要导出的数据
* @param workbook excel
* @param request request
* @param response response
* @throws Exception 异常
*/
@Override
protected void buildExcelDocument(Map<String, Object> params, HSSFWorkbook workbook, HttpServletRequest request, HttpServletResponse response) throws Exception {
String fileName = params.get("fileName") + ".xls";
String[] titles = (String[]) params.get("titleCN");
Map<String, Object> titleMap = (Map<String, Object>) params.get("titleMap");
List<Map> exportDatas = (List<Map>) params.get("exportData");
HSSFSheet sheet = workbook.createSheet();
HSSFRow header = sheet.createRow(0);
for (int i = 0; i < titles.length; i++) {
header.createCell(i).setCellValue(titles[i]);
}
int rowCount = 1;
//导入数据
for (Map exportData : exportDatas) {
HSSFRow aRow = sheet.createRow(rowCount++);
for (int i = 0; i < titles.length; i++) {
Object o = exportData.get(titleMap.get(titles[i]));
if (o != null) {
String classSimpleName = o.getClass().getSimpleName();
//TODO more types ...
if (classSimpleName.equals("Double")) {
aRow.createCell(i).setCellValue((Double) o);
} else if (classSimpleName.equals("Timestamp") || classSimpleName.equals("Date")) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
aRow.createCell(i).setCellValue(df.format(o));
} else if (classSimpleName.equals("Long")) {
aRow.createCell(i).setCellValue((Long) o);
} else if (classSimpleName.equals("Boolean") || classSimpleName.equals("boolean")){
aRow.createCell(i).setCellValue(((Boolean) o) ? "是" : "否");
}
else {
//默认转化为String
aRow.createCell(i).setCellValue(o.toString());
}
}
}
}
fileName = ReportUtils.encodeFilename(fileName, request); //处理中文文件名
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition", "attachment;filename=" + fileName);
OutputStream outputStream = response.getOutputStream();
workbook.write(outputStream);
outputStream.flush();
outputStream.close();
}
/**
* @param response
* @param request
* @param list 查询的数据集
* @param fileName 导出的文件名
* @param titleCN 导出的第一行数据
* @param titleMap 存放表头与数据字段的对应关系
* @throws Exception
*/
public void buildCsvDocument(HttpServletResponse response, HttpServletRequest request, List list, String fileName,
String[] titleCN, Map<String, String> titleMap) throws Exception {
fileName += ".csv";
fileName = ReportUtils.encodeFilename(fileName, request); //处理中文文件名
response.setContentType("application/csv;charset=gbk");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
PrintWriter out = response.getWriter();
for (int i = 0; i < titleCN.length; i++) { //遍历titleCN,表的第一行写入titleCN
if (i == titleCN.length - 1) {
out.print(titleCN[i] + "\n");
} else {
out.print(titleCN[i] + ",");
}
}
for (Object object : list) { //遍历list里的数据
readClassAttr(object, out, titleCN, titleMap);
}
out.flush();
out.close();
}
/**
* @param o list集全里面的对象
* @param out 把结果放到缓冲区
* @param titleCN 导出的第一行数据
* @param map 存放表头与数据字段的对应关系
* @throws Exception
*/
private void readClassAttr(Object o, PrintWriter out, String[] titleCN, Map<String, String> map) throws Exception {
Field[] fields = o.getClass().getDeclaredFields();
for (int n = 0; n < titleCN.length; n++) {
String str = map.get(titleCN[n]);
for (Field field : fields) {
field.setAccessible(true);
if (field.getName().equals(str)) {
if (field.get(o) != null && !"".equals(field.get(o).toString())) {
String simpleClass = field.get(o).getClass().getSimpleName();
if (simpleClass.equals("Date")) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
if (n == titleCN.length - 1) {
out.print(df.format(field.get(o)) + "\n");
} else {
out.print(df.format(field.get(o)) + ",");
}
} else if (simpleClass.equals("Integer")) {
if (n == titleCN.length - 1) {
out.print((Integer) field.get(o) + "\n");
} else {
out.print((Integer) field.get(o) + ",");
}
} else if (simpleClass.equals("Double")) {
if (n == titleCN.length - 1) {
out.print((Double) field.get(o) + "\n");
} else {
out.print((Double) field.get(o) + ",");
}
} else {
String temp = field.get(o).toString().trim();
boolean result = temp.matches("[0-9]+");
if (result == true) {
temp = "\t" + temp;
} else {
//if (temp.indexOf(",")>0)
temp = "\"" + temp + "\"";
}
if (n == titleCN.length - 1) {
out.print(temp + "\n");
} else {
out.print(temp + ",");
}
}
} else { //如果字段没有值,做处理
if (n == titleCN.length - 1) {
Java导出数据到Excel通用类,有使用范例,非常详细一看即明
5星 · 超过95%的资源 需积分: 48 12 浏览量
2015-01-29
13:07:20
上传
评论
收藏 5KB RAR 举报
Java_ytqtxf
- 粉丝: 3
- 资源: 14
最新资源
- IMG_20240423_191216.jpg
- 基于MATLAB实现分析黑体辐射光谱图时将通过迈克尔逊干涉仪得到干涉图经过傅里叶变换转换为光谱图的功能源码.zip
- DynamicArray02.java
- 数据可视化 matplotlib 实例.docx
- 数据可视化 matplotlib 实例.7z
- Python 使用 Matplotlib 绘制甘特图的实践.7z
- Python 使用 Matplotlib 绘制甘特图的实践.docx
- matplotlib 中的 cmap 参数介绍.docx
- matplotlib 中的 cmap 参数介绍.7z
- 基于matlab的毕业设计基于Matlab使用LQR实现车辆轨迹跟踪源码.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论2