2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > EasyExcel导出文件wps打开正常excel打开乱码

EasyExcel导出文件wps打开正常excel打开乱码

时间:2024-04-29 23:16:03

相关推荐

EasyExcel导出文件wps打开正常excel打开乱码

结果

代码

private static final String EXPORT_CONTENT_TYPE = "application/vnd.ms-excel";private static final String EXPORT_ENCODING = "UTF-8";@PostMapping("/exportTest")@ApiOperation("导出测试")@RequiresPermissions("dashboard:export")@TestApiEnvpublic void exportTest(@Validated @RequestBody ExportTestRequest<ExportTestVo> request) {Page<ExportTestVo> page = service.getList(request.cancelPage());List<ExportTestExcel> vos = BeanUtils.copyBeans(page.getRecords(), ExportTestExcel::new);ExcelUtil.exportData("222", ExportTestExcel.class, vos);}

public static <T> void exportData(String name,Class<?> headClass,List<T> data){exportDataNative(name, name, headClass, data);}private static <T> void exportDataNative(String excelName, String sheetName, Object head, List<T> data) {Assert.notNull(head,()->new BusinessException("head不能为null"));try {excelName = URLEncoder.encode(excelName + ExcelTypeEnum.XLS.getValue(),EXPORT_ENCODING);HttpServletResponse response = SpringUtils.getResponse();response.setContentType(EXPORT_CONTENT_TYPE);response.setCharacterEncoding(EXPORT_ENCODING);response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + excelName);// 创建excelExcelWriterBuilder write = EasyExcelFactory.write(response.getOutputStream());if(head instanceof List){//noinspection uncheckedwrite.head((List<List<String>>) head);}else if(head instanceof Class){//noinspection rawtypesClass<?> headClass = (Class) head;write.head(headClass);if(ExcelGroupMergeStrategy.contains(headClass,data.size())){ExcelGroupMergeStrategy mergeStrategy = ExcelGroupMergeStrategy.generate(headClass,data.size());write.registerWriteHandler(mergeStrategy);}}else {log.error("exportDataNative() head类型不能为"+head.getClass().getName());throw new BusinessException("不支持该head类型");}// 自适应列宽(不需要就忽略)write.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).sheet(sheetName).doWrite(data);} catch (Exception e) {e.printStackTrace();throw new BusinessException("下载报表异常");}}

修复

方式一

EXPORT_CONTENT_TYPE的值改成application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

ExcelTypeEnum.XLS.getValue()改成ExcelTypeEnum.XLSX.getValue()

方式二

controller导出方法参数列表里添加HttpServletResponse response参数

@PostMapping("/exportTest")@ApiOperation("导出测试")@RequiresPermissions("dashboard:export")@TestApiEnvpublic void exportTest(HttpServletResponse response,@Validated @RequestBody ExportTestRequest<ExportTestVo> request) {

提示

前后端content-type需要一致

后端使用application/vnd.ms-excel前端也要使用application/vnd.ms-excel

后端使用application/vnd.openxmlformats-officedocument.spreadsheetml.sheet前端也要使用application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。