JAVA 导出 Excel, 将Excel下载到本地
昨天说了如何将数据导出成 excel 的两种方式,今天完善一下将 java 导出(文件在服务器)并下载到本地
1. 触发导出 ajax 代码
- $.ajax({
- type: "POST",
- url: "${ctx}/website/clsecurity/XXXXXAction_exportUserinfoData.do",
async: false,
dataType: "json",
data: {
"province": province,
"userType": userType,
"startDate": startDate,
"endDate": endDate
},
success: function(data) {
var json = eval( \'(\' + data + \')\' );
window.open("${ctx}" + json.url);
}
});
2. 处理导出的方法代码片段
- List<ClUserinfo> regUsers = clSecurityService.findClUserinfos(clSecurityForm);
- List<TempUser> userList = new ArrayList<TempUser>();
- for (ClUserinfo userinfo : regUsers) {
- TempUser user = new TempUser();
- user.setUserName(userinfo.getUserName());
- user.setUserType(userinfo.getUserType());
- user.setCompany(userinfo.getCompany());
- user.setKeshi(userinfo.getKeshi());
- user.setProvince(userinfo.getProvince());
- user.setCreatedDate(userinfo.getCreatedDate());
- user.setCreateDateStr(userinfo.getCreatedDate().toString());
- userList.add(user);
- }
- HSSFWorkbook wb = new HSSFWorkbook();
- HSSFSheet sheet = wb.createSheet("注册用户表");
- HSSFRow row = sheet.createRow((int) 0);
- HSSFCellStyle style = wb.createCellStyle();
- style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
- HSSFCell cell = row.createCell((short) 0);
- cell.setCellValue("姓名");
- cell.setCellStyle(style);
- cell = row.createCell((short) 1);
- cell.setCellValue("专委会");
- cell.setCellStyle(style);
- cell = row.createCell((short) 2);
- cell.setCellValue("单位");
- cell.setCellStyle(style);
- cell = row.createCell((short) 3);
- cell.setCellValue("科室");
- cell.setCellStyle(style);
- cell = row.createCell((short) 4);
- cell.setCellValue("注册日期");
- cell.setCellStyle(style);
- for (int i = 0; i < userList.size(); i++) {
- row = sheet.createRow((int) i + 1);
- TempUser user = (TempUser) userList.get(i);
- row.createCell((short) 0).setCellValue(user.getUserName());
- row.createCell((short) 1).setCellValue(user.getUserType());
- row.createCell((short) 2).setCellValue(user.getCompany());
- row.createCell((short) 3).setCellValue(user.getKeshi());
- row.createCell((short) 4).setCellValue(user.getCreateDateStr());
- }
- try {
- String fileName = "RegistUserList-" + new SimpleDateFormat("yyyyMMddhhmmss").format(new Date()) + ".xls";
- String savaPath = ServletActionContext.getRequest().getRealPath("/upload/excel");
- FileOutputStream fos = new FileOutputStream(savaPath + "\\" + fileName);
- wb.write(fos);
- fos.close();
- Map<String,String> map = new HashMap<String,String>();
- map.put("url", "/upload/excel/" + fileName);
- JSONObject json = JSONObject.fromObject(map);
- this.result = json.toString();
- } catch (Exception e) {
- e.printStackTrace();
- }
3. result 装返回结果
- /**
- * json return
- */
- private String result;
- public String getResult() {
- return result;
- }
public void setResult(String result) {- this.result = result;
- }
4. XXXXXAction_XXXXXXX 方法以及 result 在 struts2 的配置
- <action name="XXXXXAction_exportUserinfoData" class="com.gzewell.ucomweb.web.security.action.XXXXXAction" method="exportUserinfoData">
- <result name="success" type="json">
- <param name="root">result</param>
- </result>
- </action>
说明:
fos:文件输出流,将文件放在服务器的 /upload/excel 目录
result: 将路径放入map 结果以 json 的形式返回
window.open:打开新的页面,即为需要下载的文件在服务器的位置
${ctx}: 为服务器地址ip | 网址的表达式 (127.0.0.1)