easyExcel读写excel

pom文件

      <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>easyexcel</artifactId>
          <version>2.1.3</version>
      </dependency>

实体类中加上注解 index代表单元格的第几列,会自动跳过第一行

    @ExcelProperty(index = 1)
    private Integer sum;

工具类

package cn.chinaunicom.mall.usercenter.excel;
/**
 * <p>
 * excel工具类
 * </p>
 *
 * @author yinna
 * @version: V1.0
 */

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.event.SyncReadListener;
import com.alibaba.excel.read.metadata.ReadSheet;
import org.apache.http.entity.ContentType;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.List;

public class ExcelUtil {

    /**
     * 读取 Excel(多个 sheet)
     *
     * @param excel 文件
     * @param clz   实体类映射
     * @return Excel 数据 list
     */
    public static Object headerRead(MultipartFile excel, Class<T> clz) {
        InputStream is;
        try {
            is = new BufferedInputStream(excel.getInputStream());
        } catch (Exception e) {
            return null;
        }
        SyncReadListener tmpListener = new SyncReadListener();
        return tmpListener.getList();
    }

    /**
     * 读取 Excel(多个 sheet)
     *
     * @param excel 文件
     * @param clz   实体类映射
     * @return Excel 数据 list
     */
    public static <T> List<T> readExcel(MultipartFile excel, Class<T> clz) {
        InputStream is;
        try {
            is = new BufferedInputStream(excel.getInputStream());
        } catch (Exception e) {
            return null;
        }
        SyncReadListener tmpListener = new SyncReadListener();
        ReadSheet readSheet = new ReadSheet();
        readSheet.setClazz(clz);
        EasyExcel.read(is).registerReadListener(tmpListener).build().read(readSheet);
        return (List<T>) tmpListener.getList();
    }

    /**
     * 读取 Excel(多个 sheet)
     *
     * @param excel 文件
     * @param clz   实体类映射
     * @return Excel 数据 list
     */
    public static <T> List<T> readExcel(String path, Class<T> clz) {
        SyncReadListener tmpListener = new SyncReadListener();
        ReadSheet readSheet = new ReadSheet();
        readSheet.setClazz(clz);
        EasyExcel.read(path).registerReadListener(tmpListener).build().read(readSheet);
        return (List<T>) tmpListener.getList();
    }


    /**
     * 导出文件时为Writer生成OutputStream
     *
     * @param fileName
     * @param response
     * @return
     * @throws Exception
     */
    public static OutputStream getOutputStream(String fileName, HttpServletResponse response)
            throws Exception {
        try {
            fileName = URLEncoder.encode(fileName, "utf-8");
            response.setContentType("application/vnd.ms-excel");
            response.setCharacterEncoding("utf-8");
            //此处指定了文件类型为xls,如果是xlsx的,请自行替换修改
            response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
            response.setHeader("Pragma", "public");
            response.setHeader("Cache-Control", "no-store");
            response.addHeader("Cache-Control", "max-age=0");
            return response.getOutputStream();
        } catch (IOException e) {
            throw new Exception("导出文件失败!");
        }
    }

    public static MultipartFile writeExcel(Class clazz, List<?> list, String fileName, InputStream templateFile) throws Exception {
        ByteArrayOutputStream os1 = new ByteArrayOutputStream();
        EasyExcel.write(os1, clazz).withTemplate(templateFile).sheet(fileName).doFill(list);
        byte[] b1 = os1.toByteArray();
        InputStream inputStream = new ByteArrayInputStream(b1);
        MultipartFile file = new MockMultipartFile(fileName, fileName, ContentType.APPLICATION_OCTET_STREAM.toString(), inputStream);
        return file;

    }

    public static String getPath() {
        return ExcelUtil.class.getResource("/").getPath();
    }


}

直接调用工具类即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,了解您的要求。关于easyexcel读写,可以参考以下步骤: 1. 引入依赖 ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.10</version> </dependency> ``` 2. 写入Excel文件 ```java // 创建Excel对应的实体对象 public class DemoData { @ExcelProperty("姓名") private String name; @ExcelProperty("年龄") private Integer age; } // 写入Excel public void writeExcel() { // 文件输出位置 String fileName = "demo.xlsx"; // 写法1 EasyExcel.write(fileName, DemoData.class).sheet("模板").doWrite(dataList); // 写法2 ExcelWriter excelWriter = null; try { excelWriter = EasyExcel.write(fileName, DemoData.class).build(); WriteSheet writeSheet = EasyExcel.writerSheet("模板").build(); excelWriter.write(dataList, writeSheet); } finally { if (excelWriter != null) { excelWriter.finish(); } } } ``` 3. 读取Excel文件 ```java // 读取Excel public void readExcel() { // 文件路径 String fileName = "demo.xlsx"; // 读取sheet1内容 EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).sheet().doRead(); // 读取所有sheet内容 EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).doReadAll(); } // 读取监听器 public class DemoDataListener extends AnalysisEventListener<DemoData> { private List<DemoData> dataList = new ArrayList<>(); @Override public void invoke(DemoData data, AnalysisContext context) { // 读取到一条数据时执行 dataList.add(data); } @Override public void doAfterAllAnalysed(AnalysisContext context) { // 读取完成后执行 // 可以将dataList进行保存操作 } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值