背景
- 若依使用的是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);}