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

myexcel的使用

参考:

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

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

我:

(1)maven依赖

<dependency>
     <!--excel-->
     <groupId>com.github.liaochong</groupId>
     <artifactId>myexcel</artifactId>
     <version>3.7.1</version>
</dependency>

(2)myexcel工具类

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)实体类映射模板

@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模板

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文件内容


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


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

相关文章:

  • 第十五章 C++ 数组
  • Spring常见面试题总结
  • 编译原理复习---正则表达式+有穷自动机
  • Java爬虫:速卖通(AliExpress)商品评论获取指南
  • 干货分享:ISO 20000认证的适用范围、认证资料清单、认证流程等问题详解
  • 深入了解蓝牙Profile类型与设备的对应关系
  • workman服务端开发模式-应用开发-vue-element-admin挂载websocket
  • Log4j2漏洞复现
  • 使用git管理项目版本
  • 基于Liveweb地铁轨道交通视频监控综合管理系统方案
  • 【ROS2】坐标TF发布(静态)
  • 支付域——支付路由设计
  • Flutter组合动画学习
  • Linux系统编程深度解析:C语言实战指南
  • 了解RPC
  • 《Web 应用项目开发:从构思到上线的全过程》
  • UE5 渲染管线 学习笔记
  • 全国硕士研究生入学考试(考研)考研时间线之大三
  • 如何获取 ABAP 内表中的重复项
  • springboot容器无法获取@Autowired对象,报null对象空指针问题的解决方式
  • VSCode+WSL作为IDE开发和管理深度学习项目
  • 低代码软件搭建自学第二天——构建拖拽功能
  • SparkSQL与Hive语法差异
  • 畅捷通T+13管理员密码任意重置漏洞
  • 【C++动态规划 前缀和】937. 扣分后的最大得分|2105
  • 5、mysql的读写分离