springboot使用hutool实现EXCEL导入导出

springboot使用hutool实现导入导出

1、maven依赖

<!--导出 导入-->
    <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>

2、 Excel导入到数据库

注意 :如果excel表格头为中文则需在实体类使用 @Alias注解 设置别名

import cn.hutool.core.annotation.Alias;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;

import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@EqualsAndHashCode
@TableName("au_info")
public class Info {
    
    
    @Alias("编号")
    private Long id;
    @Alias("名称")
    private String name;
    @Alias("简介")
    private String info;
    @Alias("价格")
    private Integer price;
    @Alias("更新时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
    @Alias("发布时间")
    @TableField(fill = FieldFill.INSERT)
    private Date publishTime;
    @Alias("是否删除(0-未删除 1-已删除")
    private Integer delField;
    //版本
    @Alias("版本")
    private Integer version;
}
@SneakyThrows
@PostMapping("/importExcel")
public ResponseResult importExcel(MultipartFile file) throws IOException {
    
    
    InputStream inputStream = file.getInputStream();
    ExcelReader reader = ExcelUtil.getReader(inputStream);
	//注意 这里的参数 是List集合中的实体类型
    List<Info> list = reader.readAll(Info.class);
    //批量插入
    insureInfoService.saveBatch(list);
    return ResponseResult.okResult();
}

3、导出到EXCEL表格(浏览器下载)

   @SneakyThrows
    @GetMapping("/exportExcel")
    public ResponseResult exportExcel(HttpServletRequest request, HttpServletResponse response) {
    
    
        //数据库查询数据
        List<Info> list = infoService.list();
        //写出浏览器
        ExcelWriter writer = ExcelUtil.getWriter();
        //自定义标题名
        // 注意:如果不设置自定义标题名 则默认为为实体类字段
        writer.addHeaderAlias("id", "编号");
        writer.addHeaderAlias("name", "名称");
        writer.addHeaderAlias("info", "简介");
        writer.addHeaderAlias("price", "价格");
        writer.addHeaderAlias("updateTime", "更新时间");
        writer.addHeaderAlias("publishTime", "发布时间");
        writer.addHeaderAlias("delField", "是否删除(0-未删除 1-已删除");
        writer.addHeaderAlias("version", "版本");

        //一次性写  默认样式 强制输出标题
        writer.write(list, true);

        //设置浏览器响应格式
        response.setContentType("application/vnd.openxmlformats-officedocument.sepreadsheetml.sheet;charset=utf-8");
        String fileName = URLEncoder.encode("基本信息", "UTF-8");
        //设置文件名
        response.setHeader("Content-Disposition", "attachemnt;filename=" + fileName + ".xlsx");
		//开写!
        ServletOutputStream outputStream = response.getOutputStream();
        //缓冲 写到excel 
        writer.flush(outputStream, true);
        //关闭资源
        outputStream.close();
        writer.close();
        return ResponseResult.okResult();
    }

猜你喜欢

转载自blog.csdn.net/weixin_51799151/article/details/124050238