Java 导出excel数据前端调用 +判断字符串编码类型

可能遇到的问题:

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 "";
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值