JFinal给我们提供了非常简便上传和下载,文件上传使用getFile(),文件下载使用renderFile(File file)
使用Poi.jar配合JFinal,在工作学习之余封装一个导出Excel的工具类,供大伙学习参考。
/*listData为数据库里查询出来的List<Record>对象,调用的时候转换成了JSONArray而已,也可以封装成List<Record>类型参数*/
public static File exportExcel(JSONArray listData) {
// 设置文件名
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
String filename = FILEPATH + dateFormat.format(date) + "_组织管理账号.xls";
File file = new File(filename);
// 标题
Map<String, String> titleData = new LinkedHashMap<String, String>();// 标题,后面用到
titleData.put("NAME", "组织名称");
titleData.put("CODE", "账号");
titleData.put("PASSWORD", "密码");
file = ExcelImportOrgUtil.saveFile(titleData, listData, file);
return file;
}
private static File saveFile(Map<String, String> headData, JSONArray listData, File file) {
// 创建工作薄
HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
// sheet:一张表的简称
// row:表里的行
// 创建工作薄中的工作表
HSSFSheet hssfSheet = hssfWorkbook.createSheet();
// 创建行
HSSFRow row = hssfSheet.createRow(0);
// 创建单元格,设置表头 创建列
HSSFCell cell = null;
// 初始化索引
int rowIndex = 0;
int cellIndex = 0;
// 创建标题行
row = hssfSheet.createRow(rowIndex);
rowIndex++;
// 遍历标题
for (String h : headData.keySet()) {
// 创建列
cell = row.createCell(cellIndex);
// 索引递增
cellIndex++;
// 逐列插入标题
cell.setCellValue(headData.get(h));
}
// 得到所有记录 行:列
JSONObject record = null;
if (listData != null) {
// 获取所有的记录 有多少条记录就创建多少行
for (int i = 0; i < listData.size(); i++) {
row = hssfSheet.createRow(rowIndex);
// 得到所有的行 一个record就代表 一行
record = listData.getJSONObject(i);
// 下一行索引
rowIndex++;
// 刷新新行索引
cellIndex = 0;
// 在有所有的记录基础之上,便利传入进来的表头,再创建N行
for (String h : headData.keySet()) {
cell = row.createCell(cellIndex);
cellIndex++;
// 按照每条记录匹配数据
cell.setCellValue(record.get(h) == null ? "" : record.get(h).toString());
}
}
}
try {
FileOutputStream fileOutputStreane = new FileOutputStream(file);
hssfWorkbook.write(fileOutputStreane);
fileOutputStreane.flush();
fileOutputStreane.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return file;
}
前端提供超链接
<a class="layui-btn layui-btn-danger" href="<%=path%>/org/exportAdmins?regionCode=${username }" >导出所有党组织管理员帐号</a>
Controller层供外界调用
// 导出地方党委下的各个支部账号
public void exportAdmins(){
// 获取所有的组织结构
String orgCode = getSessionAttr("orgCode");
String regionCode = getPara("regionCode");
Map<String,Object> map = new HashMap<String, Object>();
map.put("ORGCODE", orgCode);
map.put("REGION_CODE", regionCode);
String result = sendPostRequest("MgrOrgApi", orgCode, "getOrgNoPageLists", "825", map);
JSONObject joSrc = JSONObject.fromObject(result);
JSONArray orglists = joSrc.getJSONArray("data");
System.out.println("所有的组织="+orglists);
// 写入excel文件
File file = ExcelImportOrgUtil.exportExcel(orglists);
renderFile(file);
}
使用到Poi的jar 和jfinal的jar