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