myexcel的使用

news2024/12/26 17:26:24

参考:

(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.coloradmin.cn/o/2265941.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

20241225在ubuntu20.04.5下监控SSD

20241225在ubuntu20.04.5下监控SSD 2024/12/25 20:29 参考资料&#xff1a; 百度&#xff1a;ubuntu查看ssd寿命 方法 1&#xff1a;使用「磁盘」工具监测 SSD 健康状态 sudo apt install gnome-disk-utility 方法 2&#xff1a;使用 smartctl 工具检查 SSD 健康状态 Ubuntu 和…

mvn install:install-file jar 打入本地仓库

安装指定文件到本地仓库命令&#xff1a;mvn http://install:install-file -DgroupId : 设置上传到仓库的包名 -DartifactId : 设置该包所属的模块名 -Dversion1.0.0 : 设置该包的版本号 -Dpackagingjar : 设置该包的类型(很显然jar包) -Dfile : 设置该jar包文件所在的路径…

CentOS下,离线安装vscode的步骤;

前置条件&#xff1a; 1.CentOS7; 步骤&#xff1a; 1.下载vscode指定版本&#xff0c;例如&#xff1b; 例如 code-1.83.1-1696982959.el7.x86_64.rpm 2.使用下面命令&#xff1a; sudo rpm -ivh code-1.83.1-1696982959.el7.x86_64.rpm 其他&#xff1a; 卸载vscode的命…

【CSS in Depth 2 精译_087】14.4:CSS 中的浮动特效以及在文字环绕中的应用 + 14.5:本章小结

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第四部分 视觉增强技术 ✔️【第 14 章 蒙版、形状与剪切】 ✔️ 14.1 滤镜 14.1.1 滤镜的类型14.1.2 背景滤镜 14.2 蒙版 14.2.1 带渐变效果的蒙版特效14.2.2 基于亮度来定义蒙版14.2.3 其他蒙版属…

2025考研加油!Jing也加油哦!

一恍惚&#xff0c;离自己考研初试过去都两年了&#xff01;研究生生活也过去一大半&#xff01;借此机会也总结一下研究生这一段生活——研究生生活&#xff08;上&#xff09; About I 昨天实验室聚餐&#xff0c;作为老生欢迎新生&#xff0c;啊啊啊&#xff0c;真的没想到…

Flink调优----资源配置调优与状态及Checkpoint调优

目录 第 1 章 资源配置调优 1.1 内存设置 1.1.1 TaskManager 内存模型 1、内存模型详解 2、案例分析 1.1.2 生产资源配置示例 1.2 合理利用 cpu 资源 1.2.1 使用 DefaultResourceCalculator 策略 1.2.2 使用 DominantResourceCalculator 策略 1.2.3 使用 DominantRes…

9. zynq应用开发--makefile编译

3. 使用SDK工具 如果只做 Linux 应用开发&#xff0c;只需要一个 sdk.sh 文件即可&#xff0c;可以脱离 Petalinux 和 Vitis&#xff0c;也可以编译其三方的应用&#xff0c;可以说一劳永逸。 配置根文件系统 petalinux-config -c rootfs 编译SDK petalinux-build --sdk Linu…

【ORB-SLAM3:相机针孔模型和相机K8模型】

在ORB-SLAM3中&#xff0c;相机的建模是 SLAM 系统的核心之一&#xff0c;因为它直接影响到如何处理和利用图像数据进行定位和地图构建。ORB-SLAM3 支持不同的相机模型&#xff0c;其中包括针孔模型和鱼眼模型&#xff08;K8 模型&#xff09;。下面分别介绍这两种模型。 相机…

element-plus在Vue3中开发相关知识

报错&#xff1a;error.mjs:20 ElementPlusError: [ElForm] model is required for resetFields to work. 原因&#xff1a;el-form使用v-model没有把内容绑定上&#xff0c;需要使用 :model 才可以校验 将&#xff1a; <el-form label-width"auto" class"…

HarmonyOS NEXT 实战之元服务:静态案例效果--- 日出日落

背景&#xff1a; 前几篇学习了元服务&#xff0c;后面几期就让我们开发简单的元服务吧&#xff0c;里面丰富的内容大家自己加&#xff0c;本期案例 仅供参考 先上本期效果图 &#xff0c;里面图片自行替换 效果图1完整代码案例如下&#xff1a; import { authentication } …

使用Vue的props进行组件传递校验时出现 Extraneous non-props attributes的解决方案

作者&#xff1a;CSDN-PleaSure乐事 欢迎大家阅读我的博客 希望大家喜欢 使用环境&#xff1a;WebStorm 目录 出现错误的情况 报错&#xff1a; 代码&#xff1a; 报错截图 原因分析 解决方案 方法一 方法二 出现错误的情况 以下是我遇到该错误时遇到的报错和代码&…

基础运维学习计划-base版

目录 需要学习的内容&#xff1f; liunx基础 sql/mysql基础 tcp/ip协议基础 http基础 dns基础 网络基础&#xff1a;交换&路由概念&原理 常见网络协议 月学习计划 12.26 日 &#xff08;bilibili自己找视频看看&#xff0c;资源很多&#xff09; 12.27日 1…

亚信安全与方天股份达成战略合作,双向奔赴助力数字化转型

近日&#xff0c;亚信安全科技股份有限公司&#xff08;以下简称“亚信安全”&#xff09;正式与青岛方天科技股份有限公司&#xff08;以下简称“方天股份”&#xff09;签订合作框架协议。双方强强携手&#xff0c;在网络安全运营平台共建、信息化项目安全支撑、政企市场拓展…

117.【C语言】数据结构之排序(选择排序)

目录 1.知识回顾 2.分析 设想的思路 代码 执行结果 ​编辑 错误排查和修复 详细分析出错点 执行结果 3.正确的思路 4.其他问题 1.知识回顾 参见42.5【C语言】选择排序代码 点我跳转 2.分析 知识回顾里所提到的文章的选择排序一次循环只比一个数字,和本文接下来要…

画展在线上通过虚拟展厅展览,如何实现?有何好处?

画展在线上通过虚拟展厅展览的实现方式及好处可以归纳如下&#xff1a; 一、实现方式 1、技术基础&#xff1a; 虚拟现实&#xff08;VR&#xff09;技术&#xff1a;利用VR技术&#xff0c;观众可以佩戴VR设备身临其境地参观展厅&#xff0c;与展品进行直观互动。 三维建模…

WordPress Tutor LMS插件 SQL注入漏洞复现(CVE-2024-10400)

0x01 产品简介 WordPress Tutor LMS插件是一款功能丰富且强大的学习管理系统(LMS)插件,它专为WordPress平台设计,旨在帮助用户轻松创建、管理和销售在线课程。功能强大且易于使用的学习管理系统插件。它提供了完整的在线课程市场解决方案,帮助用户轻松创建、管理和销售在…

Spring源码_05_IOC容器启动细节

前面几章&#xff0c;大致讲了Spring的IOC容器的大致过程和原理&#xff0c;以及重要的容器和beanFactory的继承关系&#xff0c;为后续这些细节挖掘提供一点理解基础。掌握总体脉络是必要的&#xff0c;接下来的每一章都是从总体脉络中&#xff0c; 去研究之前没看的一些重要…

主流AI视频生成工具|Sora零基础入门指南

Sora是什么&#xff1f; Sora 是 OpenAI 推出的新一代 AI 视频生成工具。它能让用户通过简单的文本描述或图片提示&#xff0c;快速生成高质量的视频内容。无论是广告短片、创意视频&#xff0c;还是实验性艺术作品&#xff0c;Sora 都能帮助创作者以极低的门槛实现自己的想法。…

VUE3+django接口自动化部署平台部署说明文档(使用说明,需要私信)

网址连接&#xff1a;http://118.25.110.213:5200/#/login 账号/密码&#xff1a;renxiaoyong 1、VUE3部署本地。 1.1本地安装部署node.js 1.2安装vue脚手架 npm install -g vue/cli # 或者 yarn global add vue/cli1.3创建本地项目 vue create my-vue-project1.4安装依赖和插…

“乡村探索者”:村旅游网站的移动应用开发

3.1 可行性分析 从三个不同的角度来分析&#xff0c;确保开发成功的前提是有可行性分析&#xff0c;只有进行提前分析&#xff0c;符合程序开发流程才不至于开发过程的中断。 3.1.1 技术可行性 在技术实现层次&#xff0c;分析了好几种技术实现方法&#xff0c;并且都有对应的成…