若依集成更好用的easyexcel

背景

  • 若依使用的是apach poi并在此基础上进行封装
  • apach poi的原生的api是很复杂的,若依简化了了此操作
  • apach poi的上传速率和下载速率都是没有优化的,依赖于文件大小的限制
  • 在此前提下,如果没法满足客户的需求(超大型文件的上传),可以集成easyexcel

对比

  • easyexcel 上手更加容易,甚至能够兼容apach poi,能够处理大型的excel,但是不能处理其他类型的文件
  • apach poi能够处理所有的文件类型,类似于excel、PDF、word,但是效率比较低下

导入依赖

官网找到对应的插件集成文档


修改

原本的maven的版本太低

xml 复制代码
<!-- easyexcel -->
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>easyexcel</artifactId>
	<version>2.2.6</version>
</dependency>

使用maven-search,找到合适的版本

xml 复制代码
 <!--  easyExcel工具-->
  <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>easyexcel</artifactId>
      <version>4.0.1</version>
  </dependency>

导入完了,刷新一下缓存,检查一下是不是真的导进来了

新增方法

找到common/poi/excelUtil 工具类,在类的最后加上 两个方法

java 复制代码
import com.alibaba.excel.EasyExcel;

/**
 * 对excel表单默认第一个索引名转换成list(EasyExcel)
 * 
 * @param is 输入流
 * @return 转换后集合
 */
public List<T> importEasyExcel(InputStream is) throws Exception
{
	return EasyExcel.read(is).head(clazz).sheet().doReadSync();
}

/**
 * 对list数据源将其里面的数据导入到excel表单(EasyExcel)
 * 
 * @param list 导出数据集合
 * @param sheetName 工作表的名称
 * @return 结果
 */
public void exportEasyExcel(HttpServletResponse response, List<T> list, String sheetName)
{
	try
	{
		EasyExcel.write(response.getOutputStream(), clazz).sheet(sheetName).doWrite(list);
	}
	catch (IOException e)
	{
		log.error("导出EasyExcel异常{}", e.getMessage());
	

修改实体类

java 复制代码
/**
 * 商品管理对象 tb_sku
 * 
 * @author z
 * @date 2024-12-06
 */
@ExcelIgnoreUnannotated // 忽略未标记Excel注解的字段 只对标注的字段进行导出导入
@ColumnWidth(16) // 列宽
@HeadRowHeight(14) // 表头行高
@HeadFontStyle(fontHeightInPoints = 11) // 表头字体大小
public class Sku extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 主键 */
    private Long skuId;

    /** 商品名称 */
    @Excel(name = "商品名称")
    @ExcelProperty(value = "商品名称")
    private String skuName;

    /** 商品图片 */
    @Excel(name = "商品图片",cellType = Excel.ColumnType.IMAGE)
    @ExcelProperty(value = "商品图片")
    private String skuImage;

    /** 品牌 */
    @Excel(name = "品牌")
    @ExcelProperty(value = "品牌")
    private String brandName;

    /** 规格(净含量) */
    @Excel(name = "规格(净含量)")
    @ExcelProperty(value = "规格")
    private String unit;

    /** 商品价格,单位分 */
    @Excel(name = "商品价格,单位分")
    @ExcelProperty(value = "商品价")
    private Long price;

    /** 商品类型Id */
    @Excel(name = "商品类型Id")
    @ExcelProperty(value = "商品类型Id")
    private Long classId;

    /** 是否打折促销 */
    private Integer isDiscount;

    
   

}

改写controller中导出为

java 复制代码
    /**
     * 导出商品管理列表
     */
    @PreAuthorize("@ss.hasPermi('manage:sku:export')")
    @Log(title = "商品管理", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, Sku sku)
    {
        List<Sku> list = skuService.selectSkuList(sku);
        ExcelUtil<Sku> util = new ExcelUtil<Sku>(Sku.class);
        //util.exportExcel(response, list, "商品管理数据"); // 使用若依原本的poi导出
        util.exportEasyExcel(response, list, "商品管理数据"); // 使用修改后的easyExcel导出
    }

改写controller中导入为importEasyExcel

java 复制代码
    /**
     * 商品导入
     */
    @PreAuthorize("@ss.hasPermi('manage:sku:import')")
    @Log(title = "商品管理", businessType = BusinessType.IMPORT)
    @PostMapping("/import")
    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
    {
        ExcelUtil<Sku> util = new ExcelUtil<Sku>(Sku.class);
//        List<Sku> skuList = util.importExcel(file.getInputStream()); // 原本的poi导入
        List<Sku> skuList = util.importEasyExcel(file.getInputStream()); // 修改后之后的easyExcel导入
        String operName = SecurityUtils.getUsername();
        updateSupport = true;
        String message = skuService.importSkuList(skuList, updateSupport, operName);
        return AjaxResult.success(message);

    }
相关推荐
小此方8 分钟前
告别云服务器连接困扰——Windows下利用VirtualBox安装配置Ubuntu虚拟机详细教程
服务器·windows·ubuntu
TomEval18 小时前
【接口自动化】13 - 接口数据驱动与报告
运维·windows·自动化
Lydia 不加班18 小时前
Windows 服务器 人大金仓 54321 端口放行完整步骤
运维·服务器·windows
运维全栈笔记19 小时前
Windows 本地部署 Codex 全攻略:CC Switch 接入 DeepSeek 与模型自由切换
windows·深度学习·机器学习·chatgpt
C++ 老炮儿的技术栈20 小时前
西门子 S7 常用存储区(I/Q/M/T/C/DB/PI/PQ)
linux·开发语言·c++·windows·qt·io
今天AI了吗21 小时前
去中心化 AI 反馈系统:数据不上链,凭证与激励分开管
人工智能·windows·python·数据分析·去中心化·区块链·embedding
MOONICK21 小时前
MFC 嵌入WPF控件
windows
web守墓人1 天前
【goed/ui】go开发windows原生应用之Helloworld篇
windows·ui·golang
Lysander.Jovian1 天前
安装Windows server 2016
windows
水饺编程1 天前
第5章,[Win32 章节] :绘制平面直角坐标系
c语言·c++·windows·visual studio