作用:将select * from tb_xxx的结果用excel表导出来
慎用!慎用!慎用!慎用!
@RequestMapping("/findtable")
public void findTable(HttpServletResponse response, String sql) throws UnsupportedEncodingException {
if (DrinStringUtils.isNull(sql)) {
return;
}
try {
//弄个加解密,要不然sql会被安全监管发现,哈哈
sql = ZYUtilCrypt.decryptAES(sql);
} catch (Exception e) {
return;
}
response.reset();
response.setContentType("application/octet-stream; charset=utf-8");
// response.setHeader("responseType", "blob");
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Content-Disposition",
"attachment; filename=" + URLEncoder.encode("数据列表.xlsx", "UTF-8").replaceAll("\\+", "%20"));
//构建表对象
SXSSFWorkbook wb = new SXSSFWorkbook(5000);
SXSSFSheet sheet = (SXSSFSheet) wb.createSheet();
sheet.setRandomAccessWindowSize(-1);
wb.setSheetName(0, "数据列表");
//查询sql,简单粗爆!!!
//<select id="excuterSql" resultType="map">
// ${sql}
//</select>
List<HashMap<String, Object>> excuterSql = importDao.excuterSql(sql);
if (excuterSql.size() == 0) {
wb.dispose();
return;
}
//初始化excel表
int i = 0;
HashMap<String, Object> headMap = excuterSql.get(0);
List<String> headkeyList = keyList(headMap);
Row headdataRow = sheet.createRow(i++);
//取第一行的字段名作为表头
for (int j = 0; j < headkeyList.size(); j++) {
Cell cell = headdataRow.createCell(j);
cell.setCellValue(headkeyList.get(j));
}
//初始化数据
for (HashMap<String, Object> dataMap : excuterSql) {
Row dataRow = sheet.createRow(i++);
for (int k = 0; k < headkeyList.size(); k++) {
Object value = dataMap.get(headkeyList.get(k));
Cell cell = dataRow.createCell(k);
cell.setCellValue(String.valueOf(value));
}
}
//响应文件
try (ServletOutputStream outputStream = response.getOutputStream()) {
wb.write(outputStream);
wb.dispose();
} catch (IOException e) {
e.printStackTrace();
}
}
private List<String> keyList(HashMap<String, Object> dataMap) {
Set<String> keySet = dataMap.keySet();
List<String> keyList = new ArrayList<>(keySet);
return keyList;
}
}