myexcel的使用

参考:

(1)api文档:https://www.bookstack.cn/read/MyExcel-2.x/624d8ce73162300b.md

(2)源代码: https://github.com/liaochong/myexcel/issues

我:

(1)maven依赖

XML 复制代码
<dependency>
     <!--excel-->
     <groupId>com.github.liaochong</groupId>
     <artifactId>myexcel</artifactId>
     <version>3.7.1</version>
</dependency>

(2)myexcel工具类

java 复制代码
import com.github.liaochong.myexcel.core.DefaultExcelBuilder;
import com.github.liaochong.myexcel.core.DefaultExcelReader;
import com.github.liaochong.myexcel.utils.AttachmentExportUtil;
import org.apache.poi.ss.usermodel.Workbook;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;


/**
 * MyExcel:导入工具
 */
public class MyExcelUtils
{
    // 默认导入
    public static <T> List<T> defaultImport(InputStream stream, Class<T> clazz){
        List<T> list = new ArrayList<T>() {{
            try {
                DefaultExcelReader
                        .of(clazz)
                        .sheet(0)
                        .rowFilter(row -> row.getRowNum() > 0) // 如无需过滤,可省略该操作,0代表第一行
                        .readThen(stream ,(Consumer<T>)d -> add(d));
            } catch (Exception e) {
                if(e.getLocalizedMessage().contains("Duplicate key")){
                    throw new RuntimeException("图片定位重复,单元格图片不可以越线");
                }
                if(e.getLocalizedMessage().contains("Java heap space")){
                    throw new RuntimeException("excel文件太大,堆内存不够用");
                }
                throw new RuntimeException(e);
            }
        }};
        return list;
    }

    // 默认导出
    public static void defaultExport(HttpServletResponse response, List list, Class<?> clazz, String fileName) throws IOException
    {
        Workbook workbook = DefaultExcelBuilder.of(clazz).build(list);
        AttachmentExportUtil.export(workbook, (fileName == null || "".equals(fileName.trim())) ? "文件" : fileName, response);
    }
}

(3)实体类映射模板

java 复制代码
@Data
@ExcelModel(sheetName = "商品导入模板", rowHeight = 50,style={"vertical-align:center"}, dateTimeFormat="yyyy-MM-dd HH:mm", dateFormat="yyyy-MM-dd", decimalFormat="#")
@EqualsAndHashCode(callSuper = false)
public class ProductExcelModel {

    @ExcelColumn(index = 0, title = "商品名称")
    private String title;

    @ExcelColumn(index = 1, title = "商品图片")
    private InputStream image;


    @IgnoreColumn
    private String result; // 导入反馈错误信息

}

(4)导出excel模板

java 复制代码
public void loadTemplate(HttpServletResponse response){
        List<ProductExcelModel> list = new ArrayList<>();
        ProductExcelModel model = new ProductExcelModel();
        model.setTitle("产品名称");
        model.setImage(new FileInputStream("xx.jpg"));
        list.add(model);
        ExcelExportBuilder.defaultExcelExport(response, list, ProductExcelModel.class, "商品导入模板");
    }

(5)解析excel文件内容

java 复制代码
    public ResultInfo parseExcel(MultipartFile file) throws Exception{
        List<ProductExcelModel> list = ExcelImportBuilder.defaultImport(file.getInputStream(), ProductExcelModel.class);
        for(ProductExcelModel model:list){
            String result = "";
            if(StringUtils.isBlank(model.getTitle())){
                result = result + "\n商品名称不能为空";
            }
            if(null == model.getImage()){
                result = result + "\n商品图片不能为空";
            }
            model.setResult(result);
        }
        return ResultInfo.valueOf(list);
    }
相关推荐
棉花骑士2 小时前
【AI Agent】面向 Java 工程师的Claude Code Harness 学习指南
java·开发语言
爱敲代码的小鱼2 小时前
springboot(2)从基础到项目创建:
java·spring boot·spring
迈巴赫车主3 小时前
蓝桥杯19724食堂
java·数据结构·算法·职场和发展·蓝桥杯
i220818 Faiz Ul4 小时前
动漫商城|基于springboot + vue动漫商城系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·动漫商城系统
海兰4 小时前
【实战】MCP 服务在 Nacos 中注册状态分析与优化
android·java·github·银行系统·银行ai
Makoto_Kimur5 小时前
Java 打印模板大全
java·开发语言·排序算法
程序员榴莲5 小时前
Java(十)super关键字
java·开发语言
HAPPY酷5 小时前
Python高级架构师之路——从原理到实战
java·python·算法
Boop_wu5 小时前
[Java 算法 ] 链表
java·算法·链表
ybwycx5 小时前
SpringBoot下获取resources目录下文件的常用方法
java·spring boot·后端