当前位置: 首页 > article >正文

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

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

  • 现象
  • 分析
  • 解决(伪代码)
    • 前端 POST 实现
    • 后端实现

现象

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

分析

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

解决(伪代码)

前端 POST 实现

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);
});

后端实现

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);
}

http://www.kler.cn/a/382642.html

相关文章:

  • 安装vue脚手架出现的一系列问题
  • Docker中运行Qt应用程序——待继续研究
  • 腾讯云AI代码助手编程挑战赛-图片转换工具
  • Meilisearch ASP.Net Core API 功能demo
  • 33.3K 的Freqtrade:开启加密货币自动化交易之旅
  • 多模态大模型初探索:通过ollama部署多模态大模型
  • 基于 Encoder-Decoder 架构的大语言模型
  • C++之list的使用
  • 02- 模块化编程-006 ADC0808数码显示对比
  • python-读写Excel:openpyxl-(4)下拉选项设置
  • 24软件包的查找、安装、更新和卸载
  • 100种算法【Python版】第51篇——希尔排序
  • Excel怎么转换成word?分享两种方法!
  • 基于matlab的基于Tent混沌映射改进的麻雀搜索算法SSA优化BP神经网络预测
  • 【北京迅为】《STM32MP157开发板嵌入式开发指南》-第七十八章 Qt控制硬件
  • NLP论文速读|LOGO -- Long context aliGnment via efficient preference Optimization
  • ChatGPT任务设计和微调策略的优化
  • 泉州市工业和信息化局关于开展排查运维安全管理系统安全漏洞的通知
  • #JavaScript 宏任务与微任务详解
  • 2-146 基于matlab的双摆杆系统建模分析
  • Tomcat 启动卡住,日志显示 At least one JAR was scanned for TLDs yet contained no TLDs.
  • 【C语言】实战-力扣题库:回文链表
  • 【LeetCode】【算法】238. 除自身以外数组的乘积
  • Hadoop集群的高可用(HA)-(2、搭建resourcemanager的高可用)
  • dbt 数据分析工程实战教程(汇总篇)
  • Mill:比Maven快10倍的JVM构建工具