EasyExcel 学习之 导出 “提示问题”

EasyExcel 学习之 导出 "提示问题"

现象

EasyExcel 支持导出 xlsxxlscsv 三种文件格式。在导出过程中可能发生各种异常,当发生异常时应该提示错误信息而非导出一个错误的文件。

分析

  • 首先,后端应该支持两种不同格式(content-type)内容的返回
  • 其次,前端应该支持两种不同格式(content-type)内容的解析处理

解决(伪代码)

前端 POST 实现

javascript 复制代码
const axios = require('axios');

axios({
	url: 'https://api.example.com/export',
	method: 'post',
	data: {
		param1: 'value1',
		param2: 'value2'
	},
	responseType: 'blob',
	headers: {
		'Authorization': 'Bearer YOUR_TOKEN'
	}
})
.then(response => {
	if (response.data && response.data.type == 'application/json') {
		const render = new FileReader();
		reader.onload = (e) => {
			let content = e.target.result;
			content = JSON.parse(content);
			this.$antMessage.info(content.msg);
		}
	} else {
		var blob = new Blob([response.data]);
		const url = window.URL.createObjectURL(blob);
		const link = document.createElement('a');
		link.style.display = 'none';
		link.href = url;
		link.setAttribute('download', name);
		document.body.appendChild(link);
		link.click();
		document.body.removeChild(link);
	}
})
.catch(error => {
  	console.error('Error:', error);
});

后端实现

java 复制代码
if (errorCondition) {
	throw new BusinessException('errorCode', 'errorMsg');
}

response.setContentType(ExcelConst.MEDIA_TYPE_EXCEL);
response.setHeader(ExcelConst.CONTENT_DISPOSITION, String.format("%s:%s=%s.%s", ExcelConst.ATTACHMENT, ExcelConst.FILENAME, System.currentTimeMillis(), ExcelTypeEnum.XLSX.getValue()));

try (OutputStream os = response.getOutputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
    ExcelWriter excelWriter = EasyExcel.write(baos)
            .charset(Charset.forName("GBK")) // 或者 UTF-8
            .autoCloseStream(true)
            .excludeColumnFieldNames(Lists.newArrayList())
            .excelType(ExcelTypeEnum.XLSX).build();

	WriteSheet writeSheet = EasyExcel.writerSheet(sheetNo, sheetName).head(clazz).build();
	excelWriter.write(sheetData, writeSheet);

    excelWriter.finish();

    os.write(baos.toByteArray());
} catch (Exception e) {
    log.error(String.format("Excel 导出失败!%s", ""), e);
}
相关推荐
xiaobai1785 小时前
测试工程师入门AI技术 - 前序:跨越焦虑,从优势出发开启学习之旅
人工智能·学习
北岛寒沫5 小时前
北京大学国家发展研究院 经济学原理课程笔记(第二十一课 金融学基础)
经验分享·笔记·学习
扑火的小飞蛾5 小时前
网络安全小白学习路线图 (基于提供文档库)
学习·安全·web安全
优雅的潮叭5 小时前
c++ 学习笔记之 malloc
c++·笔记·学习
薛不痒7 小时前
深度学习之优化模型(数据预处理,数据增强,调整学习率)
深度学习·学习
昵称已被吞噬~‘(*@﹏@*)’~7 小时前
【RL+空战】学习记录03:基于JSBSim构造简易空空导弹模型,并结合python接口调用测试
开发语言·人工智能·python·学习·深度强化学习·jsbsim·空战
我想我不够好。7 小时前
学到的知识点 1.8
学习
旖旎夜光8 小时前
Linux(9)
linux·学习
浩瀚地学9 小时前
【Java】常用API(二)
java·开发语言·经验分享·笔记·学习
chao_6666669 小时前
解决 PowerShell 中文乱码问题
网络·学习·powershell