若依集成更好用的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);

    }
相关推荐
挣扎的蓝藻4 小时前
使用 Python 扫描 Windows 下的 Wi-Fi 网络实例演示
网络·windows·python
cdg==吃蛋糕4 小时前
windows sc 创建删除服务
windows
再玩一会儿看代码5 小时前
[特殊字符] 深入理解 WSL2:在 Windows 上运行 Linux 的极致方案
linux·运维·windows·经验分享·笔记·学习方法
cyz1410016 小时前
树莓派4B配置wifi热点,可访问http协议
linux·网络·windows·后端·网络协议·http·树莓派
PfCoder6 小时前
WinForm真入门(13)——ListBox控件详解
windows·c#·visual studio·winform
神州永泰7 小时前
Java logback框架日志输出中文乱码的解决方案(windows)
java·windows·logback
Java&Develop12 小时前
redis 免安装版本 启动方法 windows 安装包
数据库·windows·redis
搏博14 小时前
在WPS中通过JavaScript宏(JSA)调用DeepSeek官网API优化文档教程
javascript·人工智能·windows·深度学习·机器学习·wps
hvinsion18 小时前
【Python 开源】你的 Windows 关机助手——PyQt5 版定时关机工具
windows·python·开源·定时关机
陈奕迅本讯18 小时前
操作系统 3.4-段页结合的实际内存管理
windows