将数据导出为Excel表格
一、前台添加按钮向后台发送请求
<div
class="select-btn" style
="padding-left: 15px">
<input type
="button" onclick
="exportExcel()" value
="导出"/>
</div
>
<script type
="text/javascript">
function exportExcel() {
location
.href
= "${path}/venue/exportVenueSubscribeExcel.do?"+$("#venueIndexForm").serialize();
}
</script
>
二、后台接受请求
@RequestMapping("/exportVenueSubscribeExcel")
public void exportVenueByMessageExcel(HttpServletRequest request
, HttpServletResponse response
) {
try {
String venueName
= request
.getParameter("venueName");
String startTime
= request
.getParameter("startTime");
String endTime
= request
.getParameter("endTime");
response
.setContentType("application/vnd.ms-excel;charset=utf-8");
response
.setCharacterEncoding("UTF-8");
response
.setHeader("Content-Disposition", "attachment;filename=" + "subscribeList.xls");
ServletOutputStream out
= response
.getOutputStream();
List
<CmsVenueSubscrib> subscribList
= cmsVenueService
.queryVenueSubscribeAll(null
,venueName
,startTime
,endTime
);
String
[] header
= new String[]{"场馆名称", "场馆类型", "预约人姓名", "预定时间", "身份证号","手机号"};
String
[] zd
= new String[]{"venueName", "extTagName", "subscribeName", "subscribeTime", "subscribeIdCard","subscribePhone"};
Map map
= new HashMap<>();
for (int i
= 0; i
< zd
.length
; i
++) {
map
.put(zd
[i
], i
);
}
exportExcel
.exportVenueSubscribeExcel("场馆预约列表", map
, header
, subscribList
, out
, "yyyy-MM-dd HH:mm:ss");
} catch (IOException e
) {
e
.printStackTrace();
}
}
三、编写工具类
public String
exportVenueSubscribeExcel(String title
, Map map
, String
[] headers
, Collection
<T> dataSet
, ServletOutputStream out
, String pattern
) {
HSSFWorkbook workbook
= new HSSFWorkbook();
HSSFSheet sheet
= workbook
.createSheet(title
);
sheet
.setDefaultColumnWidth((short) 15);
HSSFCellStyle style
= workbook
.createCellStyle();
style
.setFillForegroundColor(HSSFColor
.SKY_BLUE
.index
);
style
.setFillPattern(HSSFCellStyle
.SOLID_FOREGROUND
);
style
.setBorderBottom(HSSFCellStyle
.BORDER_THIN
);
style
.setBorderLeft(HSSFCellStyle
.BORDER_THIN
);
style
.setBorderRight(HSSFCellStyle
.BORDER_THIN
);
style
.setBorderTop(HSSFCellStyle
.BORDER_THIN
);
style
.setAlignment(HSSFCellStyle
.ALIGN_CENTER
);
HSSFFont font
= workbook
.createFont();
font
.setColor(HSSFColor
.VIOLET
.index
);
font
.setFontHeightInPoints((short) 12);
font
.setBoldweight(HSSFFont
.BOLDWEIGHT_BOLD
);
style
.setFont(font
);
HSSFCellStyle style2
= workbook
.createCellStyle();
style2
.setFillForegroundColor(HSSFColor
.LIGHT_YELLOW
.index
);
style2
.setFillPattern(HSSFCellStyle
.SOLID_FOREGROUND
);
style2
.setBorderBottom(HSSFCellStyle
.BORDER_THIN
);
style2
.setBorderLeft(HSSFCellStyle
.BORDER_THIN
);
style2
.setBorderRight(HSSFCellStyle
.BORDER_THIN
);
style2
.setBorderTop(HSSFCellStyle
.BORDER_THIN
);
style2
.setAlignment(HSSFCellStyle
.ALIGN_CENTER
);
style2
.setVerticalAlignment(HSSFCellStyle
.VERTICAL_CENTER
);
HSSFFont font2
= workbook
.createFont();
font2
.setBoldweight(HSSFFont
.BOLDWEIGHT_NORMAL
);
style2
.setFont(font2
);
HSSFPatriarch patriarch
= sheet
.createDrawingPatriarch();
HSSFComment comment
= patriarch
.createComment(new HSSFClientAnchor(0, 0, 0, 0, (short) 4, 2, (short) 6, 5));
comment
.setString(new HSSFRichTextString(""));
comment
.setAuthor("why");
HSSFRow row
= sheet
.createRow(0);
for (short i
= 0; i
< headers
.length
; i
++) {
HSSFCell cell
= row
.createCell(i
);
cell
.setCellStyle(style
);
HSSFRichTextString text
= new HSSFRichTextString(headers
[i
]);
cell
.setCellValue(text
);
}
Iterator
<T> it
= dataSet
.iterator();
int index
= 0;
while (it
.hasNext()) {
index
++;
row
= sheet
.createRow(index
);
T t
= (T
) it
.next();
Field
[] fields
= t
.getClass().getDeclaredFields();
for (short i
= 0; i
< fields
.length
; i
++) {
Field field
= fields
[i
];
String fieldName
= field
.getName();
if (map
.containsKey(fieldName
)) {
try {
HSSFCell cell
= row
.createCell(Integer
.valueOf(map
.get(fieldName
).toString()));
cell
.setCellStyle(style2
);
String getMethodName
= "get" + fieldName
.substring(0, 1).toUpperCase() + fieldName
.substring(1);
Class
tCls = t
.getClass();
Method getMethod
= tCls
.getMethod(getMethodName
, new Class[]{});
Object value
= getMethod
.invoke(t
, new Object[]{});
String textValue
= null
;
if (value
instanceof Boolean) {
boolean bValue
= (Boolean
) value
;
textValue
= "Y";
if (!bValue
) {
textValue
= "N";
}
} else if (value
instanceof Date) {
Date date
= (Date
) value
;
SimpleDateFormat sdf
= new SimpleDateFormat(pattern
);
textValue
= sdf
.format(date
);
} else if (value
instanceof byte[]) {
row
.setHeightInPoints(60);
sheet
.setColumnWidth(i
, (short) (35.7 * 80));
byte[] bsValue
= (byte[]) value
;
HSSFClientAnchor anchor
= new HSSFClientAnchor(0, 0,
1023, 255, (short) 6, index
, (short) 6, index
);
anchor
.setAnchorType(2);
patriarch
.createPicture(anchor
, workbook
.addPicture(
bsValue
, HSSFWorkbook
.PICTURE_TYPE_JPEG
));
} else {
textValue
= value
.toString();
}
if (textValue
!= null
) {
Pattern p
= Pattern
.compile("^//d+(//.//d+)?$");
Matcher matcher
= p
.matcher(textValue
);
if (matcher
.matches()) {
cell
.setCellValue(Double
.parseDouble(textValue
));
} else {
HSSFRichTextString richString
= new HSSFRichTextString(
textValue
);
HSSFFont font3
= workbook
.createFont();
font3
.setColor(HSSFColor
.BLUE
.index
);
richString
.applyFont(font3
);
cell
.setCellValue(richString
);
}
}
} catch (Exception ex
) {
ex
.printStackTrace();
}
}
}
}
try {
workbook
.write(out
);
out
.flush();
out
.close();
return Constant
.RESULT_STR_SUCCESS
;
} catch (IOException e
) {
e
.printStackTrace();
return null
;
} finally {
try {
out
.close();
} catch (IOException e
) {
e
.printStackTrace();
}
}
}