EasyUi通过POI 实现导出xls表格功能
Spring +EasyUi+Spring Jpa(持久层)
EasyUi通过POI 实现导出xls表格功能
EasyUi界面:
点击导出按钮实现数据导入到xls表格中
第一步:修改按钮事件:
@Controller
@ParentPackage(“struts-default”)
@Namespace(“/”)
@Scope(“prototype”)
public class SubAreaAction extends ActionSupport implements ModelDriven<Subarea>
//注入service层
@Resource
private SubAreaservice subareaservice;
//导出按钮绑定的事件
function doExport() {
//实现访问action的有三种方式:form表单提交、js中调用submit方法、location.href。
location.href=”${pageContext.request.contextPath}/subArea_Export.action”
}
第二步:在action中提供方法:
@Action(value = “subArea_Export”)
public String subAreaExport() throws IOException {
// 查询所有的数据
List<SubArea> list = subareaservice.findSubArea();
if (list != null && list.size() > 0) {
//2.创建空的excel文件,在sheet页中设置标题行
//2.1使用workbook创建空excel
HSSFWorkbook wb = new HSSFWorkbook();
//2.2在excel中创建空sheet
HSSFSheet cs = wb.createSheet();
//2.3在sheet中创建标题行
HSSFRow row = cs.createRow(0);
//2.4在标题行创建单元格,赋值
row.createCell(0).setCellValue(“分区编号”);
row.createCell(1).setCellValue(“分区地址”);
row.createCell(2).setCellValue(“分区关键字”);
row.createCell(3).setCellValue(“分区辅助关键字”);
row.createCell(4).setCellValue(“区域编号”);
int index = 1;
//3.循环分区数据,将数据填充到excel中
for (SubArea subarea : list) {
//创建新行
HSSFRow row1 = cs.createRow(index++);
//创建新单元格,赋值
row1.createCell(0).setCellValue(subarea.getId());
row1.createCell(1).setCellValue(subarea.getAddress());
row1.createCell(2).setCellValue(subarea.getKeyWords());
row1.createCell(3).setCellValue(subarea.getAssistKeyWords());
if (subarea.getFixedArea() != null) {
row1.createCell(4).setCellValue(subarea.getFixedArea().getId());
} else {
row1.createCell(4).setCellValue(“信息未初始化”);
}
}
//4.设置文件下载响应参数:文件名、一个流两个头
String filename = “ceshi.xls”;
//获取浏览器类型
String header = ServletActionContext.getRequest().getHeader(“User-Agent”);
String mimeType = ServletActionContext.getServletContext().getMimeType(filename);
filename = FileUtils.encodeDownloadFilename(filename, header);
//一个流:response的输出流
ServletOutputStream os = ServletActionContext.getResponse().getOutputStream();
//两个头之一:content-type,告诉浏览器返回的数据格式
ServletActionContext.getResponse().setContentType(mimeType);
//两个头之二:content-disposition,告诉浏览器打开数据的方式,下载方式打开:attachment;filename=【文件名】
ServletActionContext.getResponse().setHeader(“content-disposition”, “attachment;filename=” + filename);
//5.使用response将文件返回到前台
wb.write(os);
}
return NONE;
}
第三步:通过controller层调用service层
@Service
@Transactional
public class SubAreaserviceimp implements SubAreaservice {
@Override
public List<SubArea> findSubArea() {
// TODO Auto-generated method stub
return subareadao.findAll();
}
}
由于此测试持久层用到JPA所以不能处理持久层的代码了。
直接测试。
测试结果如图: