1. 导入easypoi相关jar包,这里的easypoi-base的包也可以不倒入,因为easypoi-web中有依赖easypoi-base会自动导入的

     <!-- https://mvnrepository.com/artifact/cn.afterturn/easypoi-base -->
    <dependency>
    <groupId>cn.afterturn</groupId>
    <artifactId>easypoi-base</artifactId>
    <version>4.2.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/cn.afterturn/easypoi-annotation -->
    <dependency>
    <groupId>cn.afterturn</groupId>
    <artifactId>easypoi-annotation</artifactId>
    <version>4.2.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/cn.afterturn/easypoi-web -->
    <dependency>
    <groupId>cn.afterturn</groupId>
    <artifactId>easypoi-web</artifactId>
    <version>4.2.0</version>
    </dependency>
  2. 编写导出使用的Javabean,根据具体的需求来定。

     //导出实体类的唯一标识
    @ExcelTarget("EcCommodityManagementExport")
    //提供get、set
    @Data
    //实现序列化
    public class EcCommodityManagementExportVo implements Serializable {
    private static final long serialVersionUID = 42L; /**
    * 图片 ,此处做的第一列与第二列的列名合并(只是列名合并),因为合并之后是第一列的值作为新值填充所以与第二列 * 的name一样
    * name 导出时的列名名称
    * type 导出类型 1 是文本 2 是图片,3 是函数,10 是数字 默认是文本
    * imageType 导出类型 1 从file读取 2 是从数据库中读取 默认是文件 同样导入也是一样的
    * numFormat 数字格式化,参数是Pattern,使用的对象是DecimalFormat
    * replace 值得替换 导出是{a_id,b_id} 导入反过来,所以只用写一个
    * databaseFormat 导出时间设置,如果字段是Date类型则不需要设置 数据库如果是string 类型,这个需要设置这个数 * 据库格式
    */
    @Excel(name = "商品名称(规格描述、单位)" , type = 2 , imageType = 1 , height = 54 , width = 25)
    private String picUrl; /**
    * 商品名称
    */
    @Excel(name = "商品名称(规格描述、单位)" , height = 54 , width = 25)
    private String productName; /**
    * 商品编码
    */
    @Excel(name = "商品编码" , height = 54 , width = 25)
    private String productCode; /**
    * 原价
    */
    @Excel(name = "原价" , height = 54 , width = 25 , numFormat = "0.00")
    private BigDecimal primeCost; /**
    * 售价
    */
    @Excel(name = "售价" , height = 54 , width = 25 , numFormat = "0.00")
    private BigDecimal price; /**
    * 库存
    */
    @Excel(name = "库存" , height = 54 , width = 25)
    private int repertory; /**
    * 商品状态(0未提交1已提交2已上架3已下架)
    */
    @Excel(name = "商品状态" , height = 54 , width = 25 , replace = {"未提交_0","已提交_1","已上架_2","已下架_3"})
    private int productStatus; /**
    * 上架时间
    */
    @Excel(name = "上架时间" , height = 54 , width = 25 , databaseFormat = "yyyy-MM-dd HH:mm:ss" , format = "yyyy-MM-dd HH:mm:ss")
    private String addedTime; /**
    * 审核状态(0--1未审核2审核成功3审核失败)
    */
    @Excel(name = "审核状态" , height = 54 , width = 25 , replace = {"--_0","未审核_1","审核成功_2","审核失败_3"})
    private int auditStatus; /**
    * 审核人姓名
    */
    @Excel(name = "审核人姓名" , height = 54 , width = 25)
    private String auditUserName; /**
    * 创建人姓名
    */
    @Excel(name = "创建人姓名" , height = 54 , width = 25)
    private String createUserName; /**
    * 创建时间
    */
    @Excel(name = "创建时间" , height = 54 , width = 25 , databaseFormat = "yyyy-MM-dd HH:mm:ss" , format = "yyyy-MM-dd HH:mm:ss")
    private Date createTime; }
  3. 编写导出控制层代码

     @ApiOperation(value = "导出" , notes = "导出")
    @GetMapping("exportProduct")
    public void exportProduct(@RequestParam("productIdList") List<String> productIdList, HttpServletRequest request, HttpServletResponse response) throws Exception{
    ecCommodityManagementService.exportProduct(productIdList,request,response);
    }
  4. 编写导出业务层代码

     /**
    * 导出
    * @param productIdList
    * @param request
    * @param response
    */
    @Override
    public void exportProduct(List<String> productIdList, HttpServletRequest request, HttpServletResponse response) throws Exception{
    //如果勾选商品则查询勾选的数据,如没有勾选则查所有商品数据
    List<EcCommodityManagementExportVo> ecCommodityManagementList = ecCommodityManagementMapper.findExportData(productIdList);
    if (ecCommodityManagementList != null && ecCommodityManagementList.size() > 0){
    //封装图片数据
    for (EcCommodityManagementExportVo ecCommodityManagementExportVo : ecCommodityManagementList) {
    //导出图片时如果是链接形式要填写全路径
    ecCommodityManagementExportVo.setPicUrl(fileUrl + ecCommodityManagementExportVo.getPicUrl());
    }
    }
    //设置导出文件表头及sheet名
    ExportParams exportParams = new ExportParams("商品列表", "商品列表");
    //设置导出类型为Excel
    exportParams.setType(ExcelType.XSSF);
    //创建数据导出对象
    Workbook workbook = ExcelExportUtil.exportExcel(exportParams, EcCommodityManagementExportVo.class, ecCommodityManagementList);
    //合并单元格new CellRangeAddress(从第几行开始, 到第几行结束, 从第几列开始, 到第几列结束)
    CellRangeAddress cellAddresses = new CellRangeAddress(1, 1, 0, 1);
    workbook.getSheetAt(0).addMergedRegion(cellAddresses);
    //创建导出文件名
    String fileName = "商品列表.xlsx";
    if (workbook != null){
    //让浏览器看的懂我们要干啥
    response.setCharacterEncoding("UTF-8");
    response.setHeader("content-Type","application/vnd.ms-excel");
    response.setHeader("Content-Disposition","attachment;filename=" + URLEncoder.encode(fileName,"UTF-8"));
    workbook.write(response.getOutputStream());
    }
    }

    注:持久层代码就不贴了

  5. 编写导入使用的Javabean,根据具体的需求来定。

     //导入实体类的唯一标识
    @ExcelTarget("uploadExcel")
    //提供get、set
    @Data
    //实现序列化
    public class UploadExcelVo implements Serializable {
    //name 对应导入的Excel中的列名,必须一致!
    @Excel(name = "题目")
    private String topic; @Excel(name = "选项A")
    private String optionA; @Excel(name = "选项B")
    private String optionB; @Excel(name = "选项C")
    private String optionC; @Excel(name = "选项D")
    private String optionD; @Excel(name = "正确答案(多个答案逗号隔开且必须大写)")
    private String rightAnswers; }
  6. 编写导入控制层代码

     @ApiOperation(value = "题目模板导入" , notes = "题目模板导入")
    @PostMapping("uploadExcel")
    @ResponseBody
    public ResultBody uploadExcel(HttpServletRequest request,MultipartFile file){
    return sybQuestionBankService.uploadExcel(request,file);
    }
  7. 编写导入业务层代码

    `

     /**
    * 题目模板导入
    * @param file
    * @return
    */
    @Override
    public ResultBody uploadExcel(HttpServletRequest request,MultipartFile file) {
    //导入数据总条数
    int totalNum = 0;
    //导入成功条数
    int cg = 0;
    try {
    String bankId = request.getParameter("bankId");
    //创建数据导入规则对象
    ImportParams importParams = new ImportParams();
    //设置第一行为表头不读取
    importParams.setHeadRows(1);
    //验证Excel
    importParams.setNeedVerify(true);
    //工具类进行读取直接封装返回值类型UploadExcelVo
    ExcelImportResult<UploadExcelVo> objectExcelImportResult = ExcelImportUtil.importExcelMore(file.getInputStream(), UploadExcelVo.class, importParams);
    //遍历读取到的数据
    if (objectExcelImportResult.getList() != null && objectExcelImportResult.getList().size() > 0){
    totalNum = objectExcelImportResult.getList().size();
    SybQuestionBankDetail byQuestionBankIdLimitOne = sybQuestionBankDetailDao.findByQuestionBankIdLimitOne(bankId);
    int detailSort = 0;
    if (byQuestionBankIdLimitOne != null && !byQuestionBankIdLimitOne.equals("")){
    detailSort = byQuestionBankIdLimitOne.getDetailSort()+1;
    }else {
    detailSort = 1;
    }
    for (UploadExcelVo uploadExcelVo : objectExcelImportResult.getList()) {
    //创建题目对象进行存储数据
    SybQuestionBankDetail sybQuestionBankDetail = new SybQuestionBankDetail();
    sybQuestionBankDetail.setId(UUIDGenerator.getUUID());
    sybQuestionBankDetail.setIsDelete(0);
    sybQuestionBankDetail.setTopic(uploadExcelVo.getTopic());
    sybQuestionBankDetail.setQuestionBankId(bankId);
    sybQuestionBankDetail.setDetailSort(detailSort);
    sybQuestionBankDetail.setCreateTime(new Date());
    //封装题目选项
    List<Map<String,Object>> options = new ArrayList<>();
    Map<String,Object> mapA = new HashMap<>();
    mapA.put("optionKey","A");
    mapA.put("optionValue",uploadExcelVo.getOptionA());
    options.add(mapA);
    Map<String,Object> mapB = new HashMap<>();
    mapB.put("optionKey","B");
    mapB.put("optionValue",uploadExcelVo.getOptionB());
    options.add(mapB);
    if (uploadExcelVo.getOptionC() != null && !uploadExcelVo.getOptionC().equals("")){
    Map<String,Object> mapC = new HashMap<>();
    mapC.put("optionKey","C");
    mapC.put("optionValue",uploadExcelVo.getOptionC());
    options.add(mapC);
    }
    if (uploadExcelVo.getOptionD() != null && !uploadExcelVo.getOptionD().equals("")){
    Map<String,Object> mapD = new HashMap<>();
    mapD.put("optionKey","D");
    mapD.put("optionValue",uploadExcelVo.getOptionD());
    options.add(mapD);
    }
    sybQuestionBankDetail.setOptions(JSON.toJSONString(options));
    //封装正确答案
    String[] split = uploadExcelVo.getRightAnswers().split(",", -1);
    sybQuestionBankDetail.setRightAnswers(JSON.toJSONString(split));
    int insert = sybQuestionBankDetailDao.insert(sybQuestionBankDetail);
    if (insert > 0){
    detailSort++;
    cg++;
    }
    }
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    return ResultBody.ok().data("应导入"+totalNum+"条题目,导入成功"+cg+"条");
    }

    注:持久层代码就不贴了

    以上就是easypoi的导入导出的使用。

关于java的Excel导入导出之easypoi的更多相关文章

  1. JAVA实现Excel导入/导出【转】

    JAVA实现Excel导入/导出[转] POI的下载与安装 请到网站http://www.apache.org/dyn/closer.cgi/poi/右击超链接2.5.1.zip下载压缩包poi-bi ...

  2. java jxl excel 导入导出的 总结(建立超链接,以及目录sheet的索引)

    最近项目要一个批量导出功能,而且要生成一个单独的sheet页,最后后面所有sheet的索引,并且可以点击进入连接.网上搜索了一下,找到一个方法,同时把相关的excel导入导出操作记录一下!以便以后使用 ...

  3. java简易excel导入导出工具(封装POI)

    Octopus 如何导入excel 如何导出excel github项目地址 Octopus Octopus 是一个简单的java excel导入导出工具. 如何导入excel 下面是一个excel文 ...

  4. java中excel导入\导出工具类

    1.导入工具 package com.linrain.jcs.test; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import ...

  5. Java POI Excel 导入导出

    这个东西很容易懂,不是特别难,难就难在一些复杂的计算和Excel格式的调整上. 近期写了一个小列子,放上来便于以后使用. POI.jar下载地址:http://mirror.bit.edu.cn/ap ...

  6. Java 使用 Jxl 实现 Excel 导入导出

    开发过程中经常需要用到数据的导入导出功能,之前用的是POI,这次使用JXL,JXL相对于POI来说要轻量简洁许多,在数据量不大的情况下还是非常实用的.这里做一下使用JXL的学习记录.首先需要导入相应的 ...

  7. Java Excel 导入导出(一)

    本文主要描述通过java实现Excel导入导出 一.读写Excel三种常用方式 1.JXL——Java Excel开放源码项目:读取,创建,更新 2.POI——Apache POI ,提供API给Ja ...

  8. Java利用POI导入导出Excel中的数据

         首先谈一下今天发生的一件开心的事,本着一颗android的心我被分配到了PB组,身在曹营心在汉啊!好吧,今天要记录和分享的是Java利用POI导入导出Excel中的数据.下面POI包的下载地 ...

  9. Java之POI的excel导入导出

    一.Apache POI是一种流行的API,它允许程序员使用Java程序创建,修改和显示MS Office文件.这由Apache软件基金会开发使用Java分布式设计或修改Microsoft Offic ...

随机推荐

  1. MyEclipse配置Hibernate框架(基础篇)

    一.创建java project项目 二.项目右键Configure Facets -- Install Hibernate Facet 三.项目添加对应数据库的jar包 四.编写实体类 packag ...

  2. [源码解析] PyTorch 分布式(17) --- 结合DDP和分布式 RPC 框架

    [源码解析] PyTorch 分布式(17) --- 结合DDP和分布式 RPC 框架 目录 [源码解析] PyTorch 分布式(17) --- 结合DDP和分布式 RPC 框架 0x00 摘要 0 ...

  3. hitcontraining_magicheap

    拿到题目例行检查 程序是64位的程序 保护几乎全开,试运行一下程序 十分明显的堆溢出的界面,将程序放入ida中,shift+f12发现了后门程序 进入main主函数进行查看 可以看到当,v3==486 ...

  4. [BUUCTF]REVERSE——[WUSTCTF2020]Cr0ssfun

    [WUSTCTF2020]Cr0ssfun 附件 步骤: 例行检查,无壳儿,64位程序,直接ida载入,检索程序里的字符串,根据提示跳转 看一下check()函数 内嵌了几个检查的函数,简单粗暴,整理 ...

  5. 判断存在…Contains…(Power Query 之 M 语言)

    表函数 判断记录在表中是否存在 = Table.Contains( 表, 记录, {"指定列1",-, "指定列n"}) = Table.ContainsAll ...

  6. 替换资源(Project)

    <Project2016 企业项目管理实践>张会斌 董方好 编著 还是那个熟悉的某吃货甲,一天之内给他分配了9.6个工时的吃量,这太不厚道了哈,人家一个人又要开吃又要喝汤,这怎么吃得消呢? ...

  7. 工期设定(Project)

    <Project2016 企业项目管理实践>张会斌 董方好 编著 任务录入好以后,就得安排工期了不是,要不然每一个任务都如自动设置的从今天开始一个工作日内完成,这么简单的话,还要Proje ...

  8. linux查看磁盘SN

    ls -l /dev/disk/by-id/ | grep -iE   <SN>

  9. tcping和tcpping工具使用

    tcping和tcpping工具 1.工具使用 1.1.windows版tcping 1.2.linux版tcpping 2.B站问题(linux版本tcpping探测ip,且ip无法解析到主机名) ...

  10. SpringBoot整合Netty实现socket通讯简单demo

    依赖 <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifa ...