springboot将实体类或者List集合数据导成excel文件,批量导入数据到数据库

springboot将实体类或者List集合数据导成excel文件,批量导入数据到数据库

渡星河
2023-04-18 / 0 评论 / 12 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2023年04月18日,已超过519天没有更新,若内容或图片失效,请留言反馈。

必要依赖

用于操作excel

<!-- EasyExcel -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.2.0</version>
</dependency>

实体类例子

package cn.yyx.order.entity;

import java.math.BigDecimal;

import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import java.util.Date;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

/**
 * <p>
 *
 * </p>
 *
 * @author 渡星河
 * @since 2023-04-18
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("t_order")
@ApiModel(value="Order对象", description="")
@HeadRowHeight(20)
@ColumnWidth(20)
@ContentRowHeight(15)
@AllArgsConstructor
@NoArgsConstructor
public class Order implements Serializable {

    private static final long serialVersionUID = 1L;

    private String id;

    @ExcelProperty(index = 0,value = "客户名")
    private String cname;
    @ExcelProperty(index = 1,value = "性别")
    private String sex;
    @ExcelProperty(index = 2,value = "业务名字")
    private String sname;
    @ExcelProperty(index = 3,value = "技术名字")
    private String operatorName;

    @ExcelProperty(index = 4,value = "手机号")
    private String phone;
    @ExcelProperty(index = 5,value = "项目名字")
    private String itemName;
    @ExcelProperty(index = 6,value = "销售人员的编号")
    @ApiModelProperty(value = "销售人员的编号")
    private String saleId;

    @ExcelProperty(index = 7,value = "技术人员的编号")
    @ApiModelProperty(value = "技术人员的编号")
    private String operatorId;
    @ExcelProperty(index = 8,value = "订单日期")
    @ApiModelProperty(value = "订单日期")
    private Date orderDate;
    @ExcelProperty(index = 9,value = "服务状态")
    @ApiModelProperty(value = "0 已经服务 1 服务中 2 交了定金 3 退款")
    private Integer orderStatus;

    @ExcelProperty(index = 10,value = "是否删除")
    @TableLogic(value = "1",delval = "0")
    private Integer delstatus;

    @ExcelProperty(index = 11,value = "单价")
    private Double orderPrice;

    @ExcelProperty(index = 12,value = "备注")
    @ApiModelProperty(value = "备注")
    private String note;
    @ExcelProperty(index = 13,value = "客户生日")
    private Date birthDay;

}

注解看不懂的搜一下,这里不做解释

对应的控制类

@RequestMapping("excel")
    public void exportStudentInfos(HttpServletResponse response, HttpServletRequest request)
            throws Exception {
        // 设置响应类型
        response.setContentType("application/vnd.ms-excel");
        // 设置字符编码
        response.setCharacterEncoding("utf-8");
        // 设置响应头信息
        response.setHeader("Content-disposition",
                "attachment;filename*=utf-8''" + URLEncoder.encode("学生花名册", "UTF-8") + ".xlsx");


        List<Order> studentList = new ArrayList<Order>() {
            {
                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
                add(new Order("1", "张三", "男", "业务名称", "技术名称", "13888888888", "项目名称",
                        "SALE001", "OPERATOR001", new Date(), 0, 1, 100.00, "备注信息", new Date()));
            }
        };

        File file = new File("D:\\20222\\学生花名册.xlsx");
        if (!file.getParentFile().exists()) {
            file.getParentFile().mkdirs();
        }
        if (file.exists()) {
            file.delete();
        }

// 2. 写入 Excel 数据
        EasyExcel.write(file, Order.class).sheet("信息").doWrite(studentList);
        // 写入文件
        EasyExcel.write(response.getOutputStream(), Order.class).sheet("信息").doWrite(studentList);
    }

ImportDataListener工具类

package cn.yyx.utils;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import lombok.Getter;

import java.util.ArrayList;
import java.util.List;

public class ImportDataListener<T> extends AnalysisEventListener<T> {
    @Getter
    private final List<T> list = new ArrayList<T>();

    @Override
    public void invoke(T data, AnalysisContext analysisContext) {
        // 将数据添加到List集合里面
        list.add(data);
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        // 处理完所有数据后的操作
        //list.forEach(System.out::println);
    }
}

用于处理excel

用户上传后处理excel例子

 @PostMapping("save")
    public R save(@RequestPart MultipartFile file) throws IOException {
        ImportDataListener importOrderListener = new ImportDataListener();
        EasyExcel.read(file.getInputStream(), Order.class, importOrderListener).sheet().doRead();
        for (Object order : importOrderListener.getList()) {
            System.out.println(order);
        }
        return R.ok();
}

实操一波,上传的excel文件解析后数据保存到本地文件夹,和浏览器下载数据

@PostMapping("save")
    public R save(@RequestPart MultipartFile file) throws Exception {
        ImportDataListener<Order> importOrderListener = new ImportDataListener<Order>();
        EasyExcel.read(file.getInputStream(), Order.class, importOrderListener).sheet().doRead();
        List<Order> list = importOrderListener.getList();
        exportStudentInfos(list,response,request);
        System.out.println(list);
        return R.ok();
    }

    @RequestMapping("excel")
    public void exportStudentInfos(List<Order> orders,HttpServletResponse response, HttpServletRequest request)
            throws Exception {
        // 设置响应头信息
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");
        String fileName = "orders.xlsx"; // 设置导出文件的文件名
        response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8"));
        // 写入本地文件夹
        EasyExcel.write("D:\\apipost\\数据.xlsx", Order.class).sheet("订单数据").doWrite(orders);

        System.out.println("执行成功");
        // 写入 Excel 数据
        EasyExcel.write(response.getOutputStream(), Order.class).sheet("订单数据").doWrite(orders);
    }
1

评论 (0)

取消