easyExcel文件上传与下载

目录

1.导入POM依赖

2.模板文件 

3.实体类

4.前端页面

5.模板文件上传(Controller)

6.文件下载(Controller)

7.导出效果


 

1.导入POM依赖

        <!-- commons-io 文件流依赖-->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.7</version>
        </dependency>
        <!-- commons-fileupload -->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.4</version>
        </dependency>

       <!-- easyexcel依赖-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.0.5</version>
        </dependency>

2.模板文件 

 上面是导出模板,如果导入得话工资下面得要换成{.salary},否则报错,也可以设置实体类为字符串然后截取工资部分。

3.实体类

package com.ahead.entity;

import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.alibaba.excel.annotation.format.NumberFormat;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.ContentStyle;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import com.alibaba.excel.enums.poi.FillPatternTypeEnum;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;

/**
 * <p>
 *
 * 创建employee类,用于构建向Excel表格中写数据的类型;
 * @ExcelProperty:这个注解是EasyExcel提供,用于生成Excel表格头
 * @author 荣
 * @since 2022-12-18
 */

@ContentRowHeight(30) //设置内容高度
@HeadRowHeight(50)    //设置标题高度
@ColumnWidth(25)      //设置列宽
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("employee")
@ApiModel(value = "Employee对象", description = "")
public class Employee implements Serializable {

    private static final long serialVersionUID = 1L;

    // 字符串的内容的背景设置成天蓝(可以改后面数字)
    @ContentStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 40)
    @ExcelProperty("用户编号")
    @ApiModelProperty("用户编号")
    @TableId(value = "userId", type = IdType.AUTO)
    private Integer userId;

    @ExcelProperty("姓名")
    @ApiModelProperty("姓名")
    @TableField("userName")
    private String userName;

    @ExcelProperty("性别")
    @ApiModelProperty("性别")
    @TableField("gender")
    private String gender;

//    设置浮点数导出格式
    @NumberFormat("#.##")
    @ExcelProperty("工资")
    @ApiModelProperty("工资")
    @TableField("salary")
    private Double salary;


//    设置日期导出格式
    @DateTimeFormat("yyyy年MM月dd日 HH时mm分ss秒")
    @ExcelProperty("入职日期")
    @ApiModelProperty("入职日期")
    @TableField("hireDate")
    private Date hireDate;


}

4.前端页面

1.文件上传(此处用得是layui得上传页面)

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>zyupload上传实例</title>
    <link rel="stylesheet" th:href="@{/layuimini-v2/lib/layui-v2.6.3/css/layui.css}" media="all">
    <link rel="stylesheet" th:href="@{/layuimini-v2/lib/jq-module/zyupload/zyupload-1.0.0.min.css}" media="all">
    <link rel="stylesheet" th:href="@{/layuimini-v2/css/public.css}" media="all">
</head>
<body>
<!--<div class="layuimini-container">-->
<div class="layuimini-main">


        <div class="layui-upload-drag" id="test10">
            <i class="layui-icon"></i>
            <p>点击上传,或将文件拖拽到此处</p>
            <div class="layui-hide" id="uploadDemoView">
                <hr>
                <img src="" alt="上传成功后渲染" style="max-width: 196px">
            </div>
        </div>

</div>

    <div>
    <form th:action="@{/ahead/employee/fileDownload}" method="get">
        <input type="submit" value="文件下载">
    </form>

</div>

<script th:src="@{/layuimini-v2/lib/jquery-3.4.1/jquery-3.4.1.min.js}" charset="utf-8"></script>
<script th:src="@{/layuimini-v2/lib/layui-v2.6.3/layui.js}" charset="utf-8"></script>
<script th:src="@{/layuimini-v2/lib/jq-module/zyupload/zyupload-1.0.0.min.js}" charset="utf-8"></script>
<script type="text/javascript">

    layui.use(['upload', 'element', 'layer'], function(){
        var $ = layui.jquery
            ,upload = layui.upload
            ,element = layui.element
            ,layer = layui.layer;


        //拖拽上传
        upload.render({
            elem: '#test10'
            ,url: '../ahead/employee/fileUpload' //此处用的是第三方的 http 请求演示,实际使用时改成您自己的上传接口即可。
            ,accept: 'file' //普通文件
            ,done: function(res){
                layer.msg('上传成功');
                console.log(res);
            }
        });

</script>

</body>
</html>

5.模板文件上传(Controller)

    @RequestMapping("/fileUpload")
    @ResponseBody
    public DataFormat fileUpload(MultipartFile file) throws FileUploadException, IOException {

        InputStream inputStream = file.getInputStream();

        ArrayList<Employee> list = new ArrayList<>();
        DataFormat dataFormat = new DataFormat();
        EasyExcel.read(inputStream, Employee.class, new ReadListener<Employee>() {

            @Override
            public void invoke(Employee employee, AnalysisContext analysisContext) {
                Employee employee1 = new Employee();
//可以根据字段唯一性先查询下数据库字段是否重复
                employee1.setUserName(employee.getUserName());
                employee1.setGender(employee.getGender());
                employee1.setSalary(employee.getSalary());
                employee1.setHireDate(employee.getHireDate());
                list.add(employee1);
            }

            @Override
            public void doAfterAllAnalysed(AnalysisContext analysisContext) {
                boolean b = employeeService.saveBatch(list);
                if (b == true){
                    dataFormat.setMsg("上传成功!");
                }else {
                    dataFormat.setMsg("上传失败!");
                }
            }
        }).sheet().headRowNumber(3).doRead();

        return dataFormat;
}

6.文件下载(Controller)

    @RequestMapping("/fileDownload")
    @ResponseBody
    public void fileDownload(HttpServletResponse response) throws IOException {
        // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
        try {

//            设置响应头
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            response.setCharacterEncoding("utf-8");
            // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
            String fileName = URLEncoder.encode("测试", "UTF-8").replaceAll("\\+", "%20");
            response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");

            //获取模板文件的文件流
            InputStream inputStream = getClass()
                .getClassLoader().getResourceAsStream("Template/userTemplate2.xlsx");

            //查询数据
            List<Employee> list = employeeService.list(null);

            // 这里需要设置不关闭流
            EasyExcel.write(response.getOutputStream(), Employee.class)
                    .withTemplate(inputStream)
                    .autoCloseStream(Boolean.FALSE)
                    .sheet(0)
                    .doFill(list);
        } catch (Exception e) {
            // 重置response
            response.reset();
            response.setContentType("application/json");
            response.setCharacterEncoding("utf-8");
            Map<String, String> map = MapUtils.newHashMap();
            map.put("status", "failure");
            map.put("message", "下载文件失败" + e.getMessage());
            response.getWriter().println(JSON.toJSONString(map));
        }


    }

7.导出效果

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Java的easyExcel库进行文件的接口的示例代码如下所示: ```java import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; @RestController public class ExcelUploadController { @PostMapping("/upload") public String uploadExcel(@RequestParam("file") MultipartFile file) { try { // 检查文件类型、大小等校验 if (!file.isEmpty() && file.getOriginalFilename().endsWith(".xlsx")) { // 使用easyExcel库读取Excel文件内容 // 进行内容校验和业务处理 // ... return "Excel文件成功"; } else { return "文件格式不正确"; } } catch (Exception e) { e.printStackTrace(); return "上失败"; } } } ``` 在上述代码中,使用了Spring框架的`@PostMapping`注解将该方法映射为一个POST请求的接口。通过`@RequestParam`注解获取前端递的文件参数,参数名为"file"。在方法内部,可以进行对上文件的校验,例如判断文件类型、大小等。接着,使用easyExcel库读取上的Excel文件,并进行内容校验和业务处理。最后,返回上结果的提示信息。 请注意,上述代码仅是一个简单的示例,实际情况中可能需要根据具体的业务需求进行适当的修改。此外,还需要在项目的pom.xml文件中引入easyExcel所需的依赖,具体请参考easyExcel官方文档。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值