【Utils】EasyExcel简单使用流程

EasyExcel

引入依赖

添加EasyExcel依赖

    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.1.1</version>
        </dependency>
    </dependencies>

对应于Excel中的列设置实体类

@Data
public class UserData {

    //在这个注解下标注Excel文件中的表名
    @ExcelProperty("用户id")
    private int uid;

    @ExcelProperty("用户名")
    private String username;
}

写操作的实现

public class TestWrite {
    public static void main(String[] args) {
        //要传入的数据(封装为实体类)
        List<UserData> list = new ArrayList();
        for (int i = 0; i < 10; i++) {
            UserData data = new UserData();
            data.setUid(i);
            data.setUsername("lucy" + i);
            list.add(data);
        }

        //设置Excel的文件路径与名称
        String fileName = "D:\\Learning_Java\\Project\\SYT\\Excel\\01.xlsx";

        //调用方法实现写操作
        //.write中传入文件路径以及实体类的反射对象,、
        //.sheet中传入Excel中的sheet名
        //.doWrite中传入之前创建的实体类的集合
        EasyExcel.write(fileName, UserData.class).sheet("用户信息").doWrite(list);
    }
}

读操作的实现

创建ExcelListener监听器

创建监听器并继承AnalysisEventListener,重写其方法

public class ExcelListener extends AnalysisEventListener<UserData> {
    //一行一行的读取Excel中的内容,从第二行开始读取
    @Override
    public void invoke(UserData userData, AnalysisContext analysisContext) {
        System.out.println(userData);
    }

    //读取表头内容,需要手动重写
    @Override
    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
        System.out.println(headMap);
    }

    //读取之后执行
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {

    }
}

读操作的调用:

public class TestRead {
    public static void main(String[] args) {
        //读取文件路径
        String fileName = "D:\\Learning_Java\\Project\\SYT\\Excel\\01.xlsx";

        //调用读方法实现读取操作
        EasyExcel.read(fileName, UserData.class, new ExcelListener()).sheet().doRead();
    }
}

案例:实现一个写Excel的功能

Controller层中:

    //导出数据字典的接口
    @GetMapping("exportData")
    public Result exportDict(HttpServletResponse response) {
        dictService.exportDictData(response);
        return Result.ok();
    }

Service层中:

void exportDictData(HttpServletResponse response);

ServiceImpl中:

    //导出Excel信息
    @Override
    public void exportDictData(HttpServletResponse response) {
        //设置下载的相关信息
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");
        String fileName = "dict";
        //第一个参数代表以下载的形式完成,后面是固定格式
        response.setHeader("Content-disposition", "attachment;filename=" + fileName +  ".xlsx");
        //查询数据库
        List<Dict> dictList = baseMapper.selectList(null);
        //将Dict对象转换成DictEeVo对象再进行处理
        //创建一个DictEeVo的List
        List<DictEeVo> dictVoList = new ArrayList<>();
        for (Dict dict : dictList) {
            DictEeVo dictEeVo = new DictEeVo();
            BeanUtils.copyProperties(dict, dictEeVo);
            dictVoList.add(dictEeVo);
        }

        //调用方法进行写操作,第一个参数传输出流,第二个参数传Excel表的实体类的反射,.sheet是sheet名,doWrite传入的是写入的列表
        try {
            EasyExcel.write(response.getOutputStream(), DictEeVo.class).sheet("dict").doWrite(dictList);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

    }

案例:实现读Excel的功能

Controller层:

    //导入数据字典的接口
    @PostMapping("importData")
    public Result importDict(MultipartFile file) {
        dictService.importDictData(file);
        return Result.ok();
    }

Service层:

    void importDictData(MultipartFile file);

ServiceImpl中(注意这里需要一个监听器):

    @Override
    public void importDictData(MultipartFile file) {
        try {
            EasyExcel.read(file.getInputStream(),  DictEeVo.class, new DictListener(baseMapper)).sheet().doRead();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

监听器类,创建在listen文件夹下:

public class DictListener extends AnalysisEventListener<DictEeVo> {

    private DictMapper dictMapper;
    public DictListener(DictMapper dictMapper) {
        this.dictMapper = dictMapper;
    }

    //一行一行读取
    @Override
    public void invoke(DictEeVo dictEeVo, AnalysisContext analysisContext) {
        Dict dict = new Dict();
        BeanUtils.copyProperties(dictEeVo, dict);
        dictMapper.insert(dict);
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Uniapp 是一种跨平台开发框架,而 EasyExcel 是一种 Java 的 Excel 操作库。因此,如果你想在 Uniapp 中使用 EasyExcel 导出 Excel,需要通过调用后端 Java 接口实现。 以下是一些简单的步骤: 1. 在后端编写 Java 接口,并使用 EasyExcel 将数据写入 Excel 文件中。 2. 在 Uniapp 中调用该接口,将数据传递给后端,并接收 Excel 文件。 3. 在 Uniapp 中使用 js-xlsx 库解析 Excel 文件并展示数据,或者直接下载 Excel 文件。 下面是一个简单Java 接口示例,使用 EasyExcel 将数据写入 Excel 文件: ```java @GetMapping("/export") public void exportExcel(HttpServletResponse response) throws IOException { // 设置文件名和表头 String fileName = "example.xlsx"; String[] headers = {"姓名", "年龄", "性别"}; // 模拟数据 List<User> userList = new ArrayList<>(); userList.add(new User("张三", 20, "男")); userList.add(new User("李四", 22, "女")); userList.add(new User("王五", 23, "男")); // 写入 Excel 文件 response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); response.setHeader("Content-disposition", "attachment;filename=" + fileName); EasyExcel.write(response.getOutputStream(), User.class).head(headers).sheet("Sheet1").doWrite(userList); } ``` 其中,User 是一个简单的 POJO 类,表示用户信息。在 Uniapp 中,你可以通过调用该接口实现导出 Excel: ```javascript uni.request({ url: 'http://yourdomain.com/export', method: 'GET', responseType: 'arraybuffer', // 必须设置为 arraybuffer success: (res) => { // 解析 Excel 文件 let data = new Uint8Array(res.data); let workbook = XLSX.read(data, {type: 'array'}); // 处理 Excel 数据 let sheetName = workbook.SheetNames[0]; let sheet = workbook.Sheets[sheetName]; let json = XLSX.utils.sheet_to_json(sheet, {header: 1}); console.log(json); } }); ``` 其中,XLSX 是 js-xlsx 库的对象,用于解析 Excel 文件。你可以使用解析出来的数据进行展示或者下载 Excel 文件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值