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

若依集成更好用的easyexcel

背景

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

对比

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

导入依赖

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

在这里插入图片描述
在这里插入图片描述

修改

原本的maven的版本太低

<!-- easyexcel -->
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>easyexcel</artifactId>
	<version>2.2.6</version>
</dependency>

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

 <!--  easyExcel工具-->
  <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>easyexcel</artifactId>
      <version>4.0.1</version>
  </dependency>

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

在这里插入图片描述

新增方法

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

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

修改实体类

/**
 * 商品管理对象 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中导出为

    /**
     * 导出商品管理列表
     */
    @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

    /**
     * 商品导入
     */
    @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);

    }

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

相关文章:

  • 在 CentOS 系统上安装 ClickHouse
  • 互联网视频云平台EasyDSS无人机推流直播技术如何助力野生动植物保护工作?
  • IMX芯片启动方式
  • stm32基础(keil创建、Proteus仿真、点亮LED灯,7段数码管)
  • Yolo11改策略:卷积改进|SAC,提升模型对小目标和遮挡目标的检测性能|即插即用
  • postgresql ERROR: cannot drop the currently open database
  • Freertos任务切换
  • P2440 木材加工(py)
  • 智能电网技术如何助力能源转型?
  • 暴⼒匹配算法和KMP算法介绍
  • 【实验15】LSTM的记忆能力实验
  • C++参数传递
  • 汽车总线协议分析-CAN总线
  • aosp15上winscope离线html如何使用?
  • Lambda表达式随记
  • 多AI代理框架全面对比:AutoGen、LangGraph、CrewAI、Swarm、Magentic-One,选对你的AI超级助手!
  • 软件测试丨Appium 源码分析与定制
  • 网络编程(2)(对于UDP与TCP协议深层理解)
  • hhdb客户端介绍(10)
  • 实时数据开发|Flink状态类型
  • 【面试】Spirng的IOC启动流程
  • qmake 生成debug/qmake 生成release
  • Linux 常用命令大全:文件管理、系统信息、网络操作
  • 40分钟学 Go 语言高并发:服务监控与追踪
  • selenium:新窗口切换、关闭
  • 【优选算法篇】:揭开二分查找算法的神秘面纱--数据海洋中的精准定位器