欢迎大家加入京东淘宝捡垃圾群:698433653
/**
* 导出记录
*
* @param response 响应返回操作结果
*/
@RequestMapping(value = "/exportExcel")
public void exportExcel(HttpServletResponse response) {
//创建输出流
OutputStream out = null;
try {
//组装查询条件
HashMap map = new HashMap();
map.put("xxx", xxx);
map.put("xxx", xxx);
//导出的为Excel2007及以后的格式
String fileName = "xxx.xlsx";
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
//设置文件名为utf-8编码
response.addHeader("Content-Disposition", "attachment;filename="
+ new String(fileName.getBytes("utf-8"), "ISO8859-1"));
//设置Excel表头 换成你需要的
String[] headers = {"序号", "设备类型", "开始时间", "结束时间", "备注"};
String[] fields = {"exportNum", "EQUIPMENTTYPENAME",
"WORKSTARTTIME", "WORKSTOPTIME","REMARK"};
//不带分页的查询
List<Map> list = xxxService.getxxxListNoPage(map);
out = response.getOutputStream();
//调用生成excel的方法
ExportExcelUtil.exportExcelMap(fileName, headers, fields, list, out);
} catch (IOException e) {
logger.error("检修记录信息导出EXCEL方法失败:" + e.toString());
} finally {
try {
if (out != null) {
out.close();
}
} catch (IOException e) {
logger.error("检修记录信息关闭流失败:" + e.toString());
}
}
}
/**
* map转化Excel方法
*
* @param title 文件名
* @param headers 表头
* @param fields 数据库查出的字段名
* @param list 数据list
* @param out 输出流
*/
public static void exportExcelMap(String title, String[] headers, String[] fields,
List<Map> list, OutputStream out) {
// 声明一个工作薄 xlsx格式
XSSFWorkbook workbook = new XSSFWorkbook();
// 生成一个表格
XSSFSheet sheet = workbook.createSheet(title);
// 设置表格默认列宽度为15个字节
sheet.setDefaultColumnWidth(Constant.CONSTANT_FIFTEEN);
// 设置列宽
sheet.setColumnWidth((short) 1, (short) Constant.CONSTANT_ColumnWidth);
// 设置列宽
sheet.setColumnWidth((short) 2, (short) Constant.CONSTANT_ColumnWidth);
// 生成一个样式
XSSFCellStyle style = workbook.createCellStyle();
XSSFCellStyle bigStyle = workbook.createCellStyle();
bigStyle.setWrapText(true);
// 设置这些样式
style.setAlignment(XSSFCellStyle.ALIGN_CENTER);
style.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
bigStyle.setAlignment(XSSFCellStyle.ALIGN_LEFT);
bigStyle.setVerticalAlignment(XSSFCellStyle.ALIGN_LEFT);
// 声明一个画图的顶级管理器
XSSFDrawing patriarch = sheet.createDrawingPatriarch();
//产生表格标题行
XSSFRow row = sheet.createRow(0);
for (short i = 0; i < headers.length; i++) {
XSSFCell cell = row.createCell(i);
cell.setCellStyle(style);
XSSFRichTextString text = new XSSFRichTextString(headers[i]);
cell.setCellValue(text);
}
/*判断第一列是不是序号列*/
short ii = 0;
boolean numFlag = false;
String firstColumn = "序号";
if (firstColumn.equals(headers[0])) {
ii = 1;
numFlag = true;
}
//遍历集合数据,产生数据行
int index = 0;
int exportNum = 1;
for (Map map : list) {
index++;
row = sheet.createRow(index);
if (numFlag) {
/*序号列*/
XSSFCell cellNum = row.createCell(0);
cellNum.setCellValue(exportNum++);
cellNum.setCellStyle(style);
}
for (short i = ii; i < fields.length; i++) {
XSSFCell cell = row.createCell(i);
cell.setCellStyle(style);
try {
//判断值的类型后进行强制类型转换
String textValue =
map.get(fields[i].toUpperCase()) == null ? "" : map.get(fields[i].toUpperCase()).toString();
//如果不是图片数据,就利用正则表达式判断textValue是否全部由数字组成
if (textValue != null) {
Pattern p = Pattern.compile(matchNumber);
Matcher matcher = p.matcher(textValue);
//其它数据类型都当作字符串简单处理
if (matcher.matches()) {
//是数字当作double处理
cell.setCellValue(Double.parseDouble(textValue));
} else {
cell.setCellValue(textValue);
}
}
} catch (IllegalAccessError e) {
logger.error("导出记录Excel报错:" + e.toString());
}
}
}
try {
workbook.write(out);
} catch (IOException e) {
logger.error("导出记录Excel报错:" + e.toString());
}
}
欢迎大家加入京东淘宝捡垃圾群:698433653