hutool工具ExcelUtils实现文件的导入导出

hutool工具封装了很多丰富的工具类,当然不乏最常用的文件上传与下载

pom.xml依赖
	<!--hutool工具-->
	<dependency>
	   <groupId>cn.hutool</groupId>
	   <artifactId>hutool-all</artifactId>
	   <version>5.7.20</version>
	</dependency>
	<dependency>
	   <groupId>org.apache.poi</groupId>
	   <artifactId>poi-ooxml</artifactId>
	   <version>4.1.2</version>
	</dependency>

设置浏览器响应的格式

servletResponse.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
String fileName = URLEncoder.encode("市场活动列表", "UTF-8");
servletResponse.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");

导出接口

    /*
    导出市场活动
     */
    @GetMapping("/export")
    public void exportAllActivity(HttpServletResponse servletResponse) throws Exception{
        //1.获取所有数据
        List<Activity> activities = activityService.queryAllActivities();
        //2.在内存操作写到浏览器
        ExcelWriter writer = ExcelUtil.getWriter(true);
        //自定义标题别名
        writer.addHeaderAlias("owner", "所有者");
        writer.addHeaderAlias("name", "名称");
        writer.addHeaderAlias("startDate", "开始日期");
        writer.addHeaderAlias("endDate", "结束日期");
        writer.addHeaderAlias("cost", "成本");
        writer.addHeaderAlias("description", "描述");
        writer.addHeaderAlias("createTime", "创建时间");
        writer.addHeaderAlias("editTime", "修改时间");
        writer.addHeaderAlias("editBy", "修改者");
        //写出所有信息到excel中
     	writer.write(activities,true);
        //3.设置浏览器响应格式
        servletResponse.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
        String fileName = URLEncoder.encode("市场活动列表", "UTF-8");
        servletResponse.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");
        ServletOutputStream outputStream = servletResponse.getOutputStream();
        writer.flush(outputStream,true);
        outputStream.close();
        writer.close();
    }

导入接口

	/*
    导入市场活动表
     */
    @PostMapping("/importExcel")
    public ReturnObject imp(MultipartFile file) throws Exception{
        //1.封装返回信息
        ReturnObject returnObject = new ReturnObject();
        //2.获取当前用户
        User user = TokenUtils.getUser();
        InputStream inputStream = file.getInputStream();
        ExcelReader reader = ExcelUtil.getReader(inputStream);
        List<Activity> activities = reader.readAll(Activity.class);
		 // 方式1:(推荐) 通过 javabean的方式读取Excel内的对象,但是要求表头必须是英文,跟javabean的属性要对应起来
		//List<Activity> list = reader.readAll(Activity.class);
		/** 方式2:(推荐) 通过 javabean的方式读取Excel内的对象,但是要求在类属性上加hutool工具提供的@Alias("")注解,值填写要求输出的表头,形式如下
		@Alias("所有者")
	    private String owner;
	    @Alias("名称")
	    private String name;
	    @Alias("开始日期")
	    private String startDate;
	    @Alias("结束日期")
	    private String endDate;
	    @Alias("成本")
	    private String cost;
	    @Alias("描述")
	    private String description;
	    @Alias("创建时间")
	    private String createTime;
	    @Alias("创建者")
	    private String createBy;
	    @Alias("修改时间")
	    private String editTime;
	    @Alias("修改者")
	    private String editBy;
		List<Activity> list = reader.readAll(Activity.class);
		**/
        // 方式3:忽略表头的中文,直接读取表的内容
        List<List<Object>> list = reader.read(1);
        List<Activity> act = CollUtil.newArrayList();
        for (List<Object> row : list) {
            Activity activity = new Activity();
            activity.setName(row.get(0).toString());
            activity.setStartDate(row.get(1).toString());
            activity.setEndDate(row.get(2).toString());
            activity.setCost(row.get(3).toString());
            activity.setDescription(row.get(4).toString());
            act.add(activity);
        }
     	//3.调用service的方法保存
        int i = activityService.saveCreateActivityByList(act);
        if (i>0){
            returnObject.setCode(Constants.CODE_200);
            returnObject.setMessage("数据导入成功,共导入"+i+"条数据");
            return returnObject;
        }else {
            returnObject.setMessage("文件上传失败!");
            returnObject.setCode(Constants.CODE_400);
            return returnObject;
        }
    }

前端导入

vue实现导入

<el-upload action="http://localhost:9090/workbench/activity/importExcel" :headers="myHeaders" :on-success="handleExcelImportSuccess" :show-file-list="false" accept="xlsx" style="display: inline-block">
	<el-button type="primary" icon="el-icon-folder-add" class="ml-5">导入</el-button>
</el-upload>
data(){
	myHeaders:{
		token:"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiI0MGY2Y2RlYTBiZDM0YWNlYjc3NDkyYTE2NTZkOWZiMyIsImV4cCI6MTY2NzUyNjAxMX0.RCghA1LFJy01Q5HChlc4ILAIPXOsJqLWnA44LnYFVws",
   },
}

Vue实现导出

<el-button icon="el-icon-top" type="primary" style="margin-left:10px" class="ml-5" @click="activityExport">导出</el-button>
methods:{
	/*导出市场活动*/
    activityExport(){
        window.open("http://localhost:9090/workbench/activity/export")
   },
}
这里导入详细看我之前写的一篇element-ui中的upload组件带token的两种方法

点击查看el-upload带token的怎么实现

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Java中可以使用Apache POI库来操作Excel文件。其中,ExcelUtils是一个封装了POI库的工具类,可以方便地实现Excel导入导出。 1. 导入Excel ExcelUtils中提供了一个importExcel方法,可以将Excel文件中的数据导入Java对象中。该方法的参数包括Excel文件的路径、Java对象的类型和需要导入Excel表格的名称。例如: ```java List<User> userList = ExcelUtils.importExcel("user.xlsx", User.class, "Sheet1"); ``` 其中,"user.xlsx"是Excel文件的路径,User.class是需要导入Java对象的类型,"Sheet1"是需要导入Excel表格的名称。 2. 导出Excel ExcelUtils中提供了一个exportExcel方法,可以将Java对象中的数据导出Excel文件中。该方法的参数包括Excel文件的路径、Excel表格的名称、Java对象列表和Excel表头信息。例如: ```java List<User> userList = new ArrayList<>(); // 添加用户数据到userList中 String[] headers = {"ID", "姓名", "年龄", "性别"}; ExcelUtils.exportExcel("user.xlsx", "Sheet1", userList, headers); ``` 其中,"user.xlsx"是Excel文件的路径,"Sheet1"是需要导出Excel表格的名称,userList是Java对象列表,headers是Excel表头信息。 需要注意的是,导入导出Excel时,需要在项目中引入POI库的依赖。例如,在Maven项目中,可以在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.17</version> </dependency> ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值