可能遇到的问题:
1. tomcat不识别数据里的’{}[]’ 解决办法,在tomcat的配置文件里加入以下代码:
2.前端用ajax blob请求的话,excel内容会乱码,换成window.open,或者我的blob编码没设置明白
js:
var columns="['人员名称','工号','角色','部门名称','工时']";
var json = "[['执行人','zxr','普通员工','组织机构','1718.4'],['测试用户','1001','普通员工','部门01','48']]";
window.open("${ adminPath}/excel/exportExcelData?sheetName=人员负荷&fileName=人员负荷.xls&columns="+columns+"&datas="+json);
java:
@RequestMapping("exportExcelData")
@ResponseBody
public void exportExcelData(HttpServletRequest request, String fileName,String columns, String datas, String sheetName, HttpServletResponse response) {
excelService.exportExcelData(request, response,fileName,sheetName, JSONArray.fromObject(columns),JSONArray.fromObject(datas));
}
service:
public void exportExcelData(HttpServletRequest request,HttpServletResponse response,String fileName,String sheetName,JSONArray title,JSONArray content) {
// 创建
HSSFWorkbook wb = new HSSFWorkbook();
// 添加sheet
HSSFSheet sheet = wb.createSheet(sheetName);
HSSFRow row = sheet.createRow(0);
HSSFCellStyle style = wb.createCellStyle();
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
HSSFCell cell = null;
for (int i = 0; i<title.size();i++) {
cell = row.createCell(i);
cell.setCellValue(title.getString(0));
cell.setCellStyle(style);
}
for (int i = 0; i < content.size(); i++) {
row = sheet.createRow(i+1);
JSONArray contentItem = content.getJSONArray(i);
for (int j = 0; j < contentItem.size(); j++) {
row.createCell(j).setCellValue(contentItem.get(j).toString());
}
}
try {
String fileNameString = new String(fileName.getBytes(),"ISO-8859-1");
response.setCharacterEncoding("utf-8");
response.setContentType("application/vnd.ms-excel;");
response.setHeader("Content-Disposition", "attachment;filename="+ fileNameString);
response.addHeader("Cache-Control", "max-age=0");
OutputStream os = response.getOutputStream();
wb.write(os);
os.flush();
os.close();this.clear();
wb.close();
} catch (Exception e) {
// TODO: handle exception
}
}
导出结果:
判断字符串编码类型
private String getEncoding(String str) {
String encode = "GB2312";
try {
if (str.equals(new String(str.getBytes(encode), encode))) { //判断是不是GB2312
return encode;
}
encode = "ISO-8859-1";
if (str.equals(new String(str.getBytes(encode), encode))) { //判断是不是ISO-8859-1
return encode;
}
encode = "UTF-8";
if (str.equals(new String(str.getBytes(encode), encode))) { //判断是不是UTF-8
return encode;
}
encode = "GBK";
if (str.equals(new String(str.getBytes(encode), encode))) { //判断是不是GBK
return encode;
}
return "";
}catch (Exception exception3) {
return "";
}
}