jsp 页面
首先需要引入jquery.redirect.js
<button οnclick="exportExcel();">导出</button>
js页面
function exportExcel(){
var param = {"userId":userId};
$.redirect(path+ '/exportExcel.action',param);
}
后台:
public class BjUserVO {
private String username;
private String sex ;
private String age;
private String department;// 单位
private String part;// 部门
}
//需要注意的是headers 里面的字段的先后顺序要和BjUserVO里面的先后顺序保持一致
public void exportExcel() throws Exception {
List<BjUserVO> list = new ArrayList<BjUserVO>();
HttpServletResponse response = ServletActionContext.getResponse();
list = bjSrvService.queryBjUserDetail(userId);
ExportAndImportCommonExcel<BjUserVO> ee= new ExportAndImportCommonExcel<BjUserVO>();
String[] headers = { "姓名", "性别", "年龄", "单位" ,"部门"};
String fileName = "人员详情表";
ee.exportExcel(headers,list,fileName,response);
}
//下面是导出的共用的模板(要是有样式的不统一的话就需要根据需求做相应的变化)
public class ExportAndImportCommonExcel<T> {
/**
* @Title: exportExcel
* @Description: 导出excel
* @Return: void
* @throws
* @param object 实体
* @param headers 标题
* @param bjSrvNotifyList 数据
* @param fileName 文件名称
* @param response 输出
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public void exportExcel(String[] headers,List list, String fileName,HttpServletResponse response) {
// 声明一个工作薄
XSSFWorkbook workbook = new XSSFWorkbook();
// 生成一个表格
XSSFSheet sheet = workbook.createSheet(fileName);
// 设置表格默认列宽度为15个字节
sheet.setDefaultColumnWidth((short) 20);
// 产生表格标题行
XSSFRow row = sheet.createRow(0);
for (short i = 0; i < headers.length; i++) {
XSSFCell cell = row.createCell(i);
XSSFRichTextString text = new XSSFRichTextString(headers[i]);
cell.setCellValue(text);
}
try {
// 遍历集合数据,产生数据行
Iterator<T> it = (Iterator<T>) list.iterator();
int index = 0;
while (it.hasNext()) {
index++;
row = sheet.createRow(index);
T t = (T) it.next();
// 利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值
Field[] fields = t.getClass().getDeclaredFields();
for (short i = 0; i < headers.length; i++) {
XSSFCell cell = row.createCell(i);
Field field = fields[i];
String fieldName = field.getName();
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[] {});
// 判断值的类型后进行强制类型转换
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
String textValue = null;
if(fieldName.equals("conSignTime")){
textValue = df.format(value).substring(0, 10);
}
// 其它数据类型都当作字符串简单处理
else if(value != null && value != ""){
textValue = value.toString();
}
if (textValue != null) {
XSSFRichTextString richString = new XSSFRichTextString(textValue);
cell.setCellValue(richString);
}
}
}
getExportedFile(workbook, fileName,response);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
*
* 方法说明: 指定路径下生成EXCEL文件
* @return
*/
public void getExportedFile(XSSFWorkbook workbook, String name,HttpServletResponse response) throws Exception {
BufferedOutputStream fos = null;
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
try {
String fileName = name+df.format(new Date())+ ".xlsx";
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename=" + new String( fileName.getBytes("gb2312"), "ISO8859-1" ));
fos = new BufferedOutputStream(response.getOutputStream());
workbook.write(fos);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (fos != null) {
fos.close();
}
}
}
}
java 导出excel表格(.xlsx)
最新推荐文章于 2024-04-23 13:01:43 发布