1、前言
在实际开发中,经常会遇到需将员工信息、设备信息导出到Excel。
使用JasperReport和poi导出Excel,如何实现呢
导出页面如下图:
导出的Excel如下图:
2、需要的jar包
JasperReport:
jasperreports-5.6.0.jar
jasperreports-fonts-5.0.0.jarPoi:
poi-3.12.jar
poi-excelant-3.12.jar
poi-ooxml-3.12.jar
poi-ooxml-schemas-3.12.jar
poi-scratchpad-3.12.jar
3、页面代码:
导出按钮
<td>
<input type="file" name="uploadFile" multiple id="uploadFile" accept=".xls,.xlsx" style="font-size: 10px;font-family: Microsoft YaHei;border-style: inset;border-width: 2px;padding: 1px;">
</td>
<td>
<a onclick="exportClick();"
href="javascript:void(0);"
class="easyui-linkbutton ebsButton"
data-options="iconCls:'fa fa-1x fa-fw fa-file-excel-o',plain:true">
导出
</a>
</td>
exportClick()函数
//导出设备信息
function exportClick(){
//查询要导出设备信息的数量
$.ajax({
type:"POST",
dataType: "json",
cache:false,
url:"/dev/base/dev/getAllDevCount.do",
data: getFormData("searchForm"),
async: false,
success: function(data) {
if(data > 0){
//如果要导出的设备信息的数量大于0,执行数据导出操作
$("#searchForm").attr("action",
"/dev/base/dev/exportDevs.do").submit();
}else{
layer.msg('未能查询到数据', {icon: 0});
}
},
error: function(data) {
layer.msg('导出失败,查询导出数据数量异常!', {icon: 0});
}
});
}
注:我们执行数据导出操作的代码是:
$("#searchForm").attr("action",
"/dev/base/dev/exportDevs.do").submit();
为了使用户操作体验更友好,也可以采用在弹出框中显示导出文件。
代码如下图:
var keyWords = $("#details_keyWords").val();
var url = "/dev/base/dev/exportDevs.do?keyWords="+keyWords;
//弹出窗口的宽度;
var iWidth=600;
//弹出窗口的高度;
var iHeight=200;
//获得窗口的垂直位置;
var iTop = (window.screen.availHeight-30-iHeight)/2;
//获得窗口的水平位置;
var iLeft = (window.screen.availWidth-10-iWidth)/2;
window.open(url,"","toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, status=no,height="+iHeight+", width="+iWidth+", top="+iTop+", left="+iLeft);
如下图:
4、后台代码:
注:查询要导出设备信息的数量的方法getAllDevCount()就不贴代码了
/**
*
* 导出设备信息
* @author张三
* @param response
* @param devBean 导出的查询条件
*/
@RequestMapping("/exportDevs")
public void exportDevs(HttpServletResponse response,DeviceBean devBean){
try {
List<DeviceBean> result = deviceService.getAllDevs(bean);
//JasperReport参数封装工具类
JasperReportCriteria criteria = new JasperReportCriteria();
//模板名
criteria.setJrxmlName("Device");
criteria.setResult(result);
//路径
criteria.setJrxmlPath("/report/");
criteria.setAutoBuildJasper(false);
//设置工作薄name
criteria.setSheetName("设备信息");
//设置导出的文件名
criteria.setReportFileName("设备信息"+DateTimeUtils.getNowDateString());//文件名
//文件类型
criteria.setType(JasperReportCriteria.REPORT_TYPE_MSEXCEL);
ReportExporter.exportReport(criteria, response);
} catch (Excepti