excel生成并下载
注意事项
ajax请求的数据类型不能以二进制流形式返回,所以建议以
- 表单形式提交,附带参数可以以隐藏域传值或者url后拼接。
- 使用window.location.href。
- 在前端拿到二进制流在处理等等。
前台代码
<!-- 前端form表单代码 -->
<form id="userExport" action='sysUserController!exportExcel.m'
method="post">
<input type="hidden" id="ids" name="ids" >
</form>
/**
*提交之前逻辑代码
*
*/
var data ={
ids:selRow
};
var data = JSON.stringify(selRow);
1. 表单提交
$('#ids').val(data);
$("#userExport").submit()
2. 使用window.location.href
window.location.href = "sysUserController!exportExcel.m?ids="+data;
/**
*这里根据自己实际需求去写
* 这里都是一些封装的方法
* controller 该加什么注解就加
*/
public void exportExcel(){
//通过ids获取一个json数组
String jsonIds = this.pageData.getParams().get("ids");
//把json数据转数组
String[] ids = (String[]) JSONUtil.readJSON2Array(jsonIds, String.class);
//生成excel
this.sysUserService.receive(ids);
//this.sysUserService.receive(ids,this.returnData);
}
/**
* 这里是 service
* 1、首先得到你要生成的数据
* 2、创建一个excel文件
* 3、创建一个sheet
* 4、设置sheet样式
* 5、设置内容
* 6、输出
*/
public void receive(String[] ids,IReturnData returnData) {
//通过id查询得到实体集合
List<User> list = ArrayIdToList(ids);
//excel导出
export(list,returnData);
}
/**
*生成excel并输出
*
*/
private void export(List<User> list,IReturnData returnData) {
HttpServletResponse response = ServletActionContext.getResponse();
//创建一个excel文件
HSSFWorkbook wb = new HSSFWorkbook();
//创建一个sheet
HSSFSheet sheet = wb.createSheet("用户权限");
//生成一个用户权限sheet
getUserRoleInfo(wb,sheet,list);
//循环遍历生成菜单权限sheet
for (int i = 0;i < list.size(); i++) {
List<Role> roles = getRoleByUser(list.get(i));
for (Role role : roles) {
String roleName = role.getName();
//创建sheet
HSSFSheet createSheet = wb.createSheet(list.get(i).getLoginName()+roleName+"菜单权限");
//生成sheet
getMenuInfo(wb,createSheet,role);
}
}
//输出
toPrint(wb,response);