使用easy-poi实现excel导入导出功能

2023-10-29

DTO内容
DTO中内容:
import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.afterturn.easypoi.handler.inter.IExcelDataModel;
import cn.afterturn.easypoi.handler.inter.IExcelModel;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import org.springframework.format.annotation.DateTimeFormat;

@Data
@ExcelIgnoreUnannotated // 忽略其他未使用注解的字段
public class DTO implements IExcelDataModel, IExcelModel {
	@Excel(name = "名称") // 导入时使用该注解
	@ExcelProperty("名称") // 导出时使用该注解
	@ApiModelProperty(name = "aa", value = "名称")
	private String aa;
	
	// 主要使用该注解对日期类型进行转换
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08")
	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	@ApiModelProperty(name = "aa", value = "时间")
	private Date bb;

	@JsonSerialize(using = UnBigDecimalSerialize.class)
	private Bigdecimal cc;
}

// 金钱格式化方法
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

import java.io.IOException;
import java.math.BigDecimal;
import java.text.DecimalFormat;

public class UnBigDecimalSerialize extends JsonSerializer<BigDecimal> {
    private DecimalFormat df = new DecimalFormat("##0.00");

    public UnBigDecimalSerialize() {
    }

    public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializers) throws IOException, JsonProcessingException {
        gen.writeString(this.df.format(value));
    }
}
导出
public R export(Searchable searchable) {
        try {
            String fileName = "导出.xlsx";
            ServletRequestAttributes servletRequestAttributes =
                (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
            HttpServletResponse response = servletRequestAttributes.getResponse();
            OutputStream outputStream = response.getOutputStream();
            response.setContentType("application/vnd.ms-excel");
            response.setCharacterEncoding("utf-8");
            response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
            final List<DTO> DTOS = service.queryDetail(searchable);

            EasyExcel.write(outputStream, DTO.class)
                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).sheet("sheet1")
                .doWrite(DTOS);
            return R.ok(null);
        } catch (Exception e) {
                return R.error(400, "导出失败", null);
        }
    }
导入
    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
    public R<List<DTO>> importExcel(@RequestParam("file") MultipartFile multipartFile) {
        try {
            ImportParams params = new ImportParams();
            params.setHeadRows(1);
            // 开启Excel校验
            params.setNeedVerify(true);
            ExcelImportResult<DTO> result = ExcelImportUtil.importExcelMore(multipartFile.getInputStream(), DTO.class, params);
            StringBuilder errorMsg = new StringBuilder();
            for (DTO entity : result.getFailList()) {
                String msg = "第" + entity.getRowNum() + "行的错误是:" + entity.getErrorMsg() + ";";
                errorMsg.append(msg);
            }
            if (result.isVerfiyFail()) {
                return R.error(400, "导入失败:" + errorMsg, null);
            }
            if (result.getList().size() > 20000) {
                throw new Exception(400, "数据应少于20000条");
            }
            // 执行保存操作
            service.save(result.getList());
            return R.success(result.getList());
        } catch (Exception e) {
            return R.error(400, "导入失败", null);
        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用easy-poi实现excel导入导出功能 的相关文章

随机推荐

  • WinForm中如何实现panel和SplitContainer相结合进行布局呢

    相信大家都会在winform应用程序中进行布局 通常我们也会使用一下这种布局 如图 以上布局分别采用了Panel 黑色区域 和SplitContainer控件 白色区域 这布局相信大家耳熟能详了 比如VS2010不就是典型这样布局吗 但是需
  • 西瓜书之误差逆传播公式推导、源码解读及各种易混淆概念

    关键词 反向传播 BP caffe源码 im2col 卷积 反卷积 上池化 上采样 公式推导 以前看到一长串的推导公式就想直接跳过 今天上午莫名有耐心 把书上的公式每一步推导自己算一遍 感觉豁然开朗 遂为此记 sigmoid函数求导比rel
  • 最小二乘拟合,L1、L2正则化约束

    最小二乘法 又称最小平方法 是一种数学优化技术 它通过最小化误差的平方和寻找数据的最佳函数匹配 利用最小二乘法可以简便地求得未知的数据 并使得这些求得的数据与实际数据之间误差的平方和为最小 从维基百科中摘取的最小二乘的拟合曲线 解法 其中Y
  • TSI系统测量参数之:热膨胀

    一 TSI系统测量参数 1 轴向位移 2 盖振或瓦振 3 偏心 4 键相 5 零转速 6 轴向振动 7 相对热膨胀 胀差 8 绝对热膨胀 缸胀 二 各参数作用 4 绝对热膨胀 汽轮机在开机过程中由于受热使其汽缸膨胀 如果膨胀不均匀就会使汽缸
  • 辅助汇编学习记录2

    通用寄存器 EAX EBX ECX EDX ESI EDI ESP EBP 它 们 的低 16 位就是 8086 的 AX BX CX DX SI DI SP BP 它们的含义如下 EAX 累加器 EBX 基址寄存器 Base ECX 计数
  • C语言中的短路现象

    短路现象1 比如有以下表达式 a b c 只有a为真 非0 才需要判断b的值 只有a和b都为真 才需要判断c的值 举例 求最终a b c d的值 main int a b c d a 0 b 1 c 2 d a b c printf a d
  • 桥接模式与策略模式的区别

    文章转载自 http www blogjava net wangle archive 2007 04 25 113545 html 桥接 Bridge 模式是结构型模式的一种 而策略 strategy 模式则属于行为模式 以下是它们的UML
  • 【生信】全基因组关联分析(GWAS)原理

    生信 全基因组关联分析 GWAS 原理 文章的文字 图片 代码部分 全部来源网络或学术论文 文章会持续修缮更新 仅供大家学习使用 目录 生信 全基因组关联分析 GWAS 1 前提知识介绍 1 1 最小二乘法 1 2 GWAS的数学原理 1
  • 【笔记】软件测试06——Web自动化

    阅读 石墨文档 七 web自动化测试 GUI自动化测试学习内容 了解自动化测试的相关概念 掌握Selenium Webdriver常用API 掌握自动化测试中的元素定位方法 掌握自动化测试中的元素操作 掌握自动化测试断言操作 掌握unitt
  • 使用合宙Air700e点亮一个LED灯(lua)

    相信很多朋友和我一样都团了9 9的air700e开发板 我猜有很多朋友都是买来吃灰的吧 包括我也是一样 网络上的相关资料并不是很丰富 对于像我这样的小白来说不是很友好 今天给大家演示一下使用air700e演示点灯大法 通常我们见到使用通信模
  • HTML常用标签合集

    今天来讲讲有关html的常用标签 嘎嘎有用 嘎嘎好用 目录 HTML常用标签 一 首先来讲第一种 标题标签 h1 h6 二 第二种 段落标签 p 三 第三种 hgroup标签 四 第四种 强调标签 em strong 五 第五种 引用标签
  • 关于Android向前兼容和向后兼容问题的理解

    最近在和别人交流的的时候涉及到Android开发向前兼容和向后兼容的问题一头雾水 于是乎定下心来好好研究了下 虽然所知也只是些皮毛 但是也总比啥也不知道的好 所以在此总结 一 向前兼容 1 何谓向前兼容 google公司在不断的发步新的an
  • [译] 最佳安全实践:在 Java 和 Android 中使用 AES 进行对称加密

    原文地址 Security Best Practices Symmetric Encryption with AES in Java and Android 最佳安全实践 在 Java 和 Android 中使用 AES 进行对称加密 我将
  • 获取网络MP3真实地址

    MP3网站的歌曲都采用了不同的加密方法 直接从页面的源文件中是找不到其 MP3的网址的 以下有两个public class都可独立运行 只要将其构造方法更名为main方法就可以了 同时还需要在给出的JAVA源代码中找到 播放或下载代码 这一
  • 手把手带你从0完成医疗行业影像图像检测三大经典模型InceptionV3-RestNet50-VGG16(附python源代码及数据库)——改变世界经典人工智能项目实战(一)手把手教学迁移学习

    手把手带你从0完成医疗行业影像图像检测三大经典模型InceptionV3 RestNet50 VGG16 1 迁移学习简介 2 项目简介 3 糖尿病视网膜病变数据集 4 考虑类别不平衡问题 5 定义模型质量 6 定义损失函数 7 预处理图像
  • java输出json格式的文件超级详细简单!!!!

    话不多说直接上代码 package ram import com alibaba fastjson JSON import com alibaba fastjson serializer SerializerFeature import j
  • 基于java网上订餐网站系统

    通过网上西餐厅网上订餐管理系统这个平台 消费者足不出户就可以了解大量的西餐厅菜单信息 给消费者带来了极大的方便 网上西餐厅管理系统平台的主要功能包括菜单类别管理 菜单信息管理等 根据客户种类又可以划分成管理员客户和会员客户两种 本系统前台设
  • OSWatcher使用简介

    OSWatcher Black Box 简称OSW 是oracle提供的一个小但是非常有用的工具 它通过调用OS自己提供的命令来记录OS运行时的一些性能参数 比如CPU Memory Swap Network IO Disk IO相关的信息
  • 重大变更(一):关于C++26的十大猜想

    你好 我是卢誉声 在上一讲中 我们讨论了C 23带来的变化 由于C 23已经是冻结特性 所以我们讨论得非常具体 C 23作为 更好的C 20 其本质是针对C 20进行改进和修补 所以涵盖的内容比较有限 但是 作为继C 20之后的又一重大标准
  • 使用easy-poi实现excel导入导出功能

    DTO内容 DTO中内容 import cn afterturn easypoi excel annotation Excel import cn afterturn easypoi handler inter IExcelDataMode