springboot文件上传+下载+解析“Excel“+生成“Excel”

SpringBoot结合注解导入excel 实现注解化导入excel,方便导入复用,在使用的时候直接用泛型来接收,在实体中配注解,从而舍弃对读到的每个excel表格做列匹配的复杂过程。我已经将代码做成jar包,有需要的可以下载导入直接使用,当然如果不嫌麻烦的可以使用源码,下面贴上源码例子 1、导入maven包 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> &... 阅读详情

目录

一、文件上传

1.创建一个 LogService,先实现文件上传功能服务

2.创建一个控制器LogController

3.然后我们就可以启动项目,访问对应的url。

 二、下载

1.在LogService文件基础上,新增logDownload方法

2.在LogController文件基础上,新增logDownload方法

3.访问下载url 

三、解析xls文件

1.导入poi.jar包

2.创建一个解析xls的工具类

3.使用HandleFile工具类

3.改造一下LogService.upLogLoad方法,实现文件上传+文件解析

4.最后启动服务,再上传一次文件

四、生成Excel文件

1、场景描述

 2、新建@Excel注解

 3、实体类上使用注解

4、新建生成表格工具类

5、在LogController新增export功能

6、最后看效果



工作上我们经常会遇到,数据导入数据库,或者报表导出。这期,我就到大家用springboot实现“文件上传+下载+解析"xls"文件”。

一、文件上传

1.创建一个 LogService,先实现文件上传功能服务

@Service
public class LogService {

   /**
     * 文件上传
     *
     * @param file
     * @return
     * @throws Exception
     */
    public ResultVo upLogLoad(MultipartFile file) throws Exception {
        if (file == null || file.isEmpty()) {
            return ResultVo.error(1, "未选择需上传的日志文件");
        }
        //获取绝对路径
        String filePath = new File("src/main/java/com/example/thyy/file").getAbsolutePath();
        //获取文件名
        String fileName = file.getOriginalFilename();
        //判断文件类型,这里我们只要xls文件
        if (fileName != null && !fileName.endsWith(".xls"))
            return ResultVo.error(1, "请选择“xls”文件");
        //获取文件上传名称
        File fileUpload = new File(filePath, fileName);
        if (fileUpload.exists()) {
            return ResultVo.error(1, "上传的日志文件已存在");
        }
       
        try {
            //上传文件
            file.transferTo(fileUpload);
            return ResultVo.success();
        } catch (IOException e) {
            return ResultVo.error(1, "上传日志文件到服务器失败" + e.toString());
        }


    }

}

注意:filePath是指上传的文件,存到那个目录上。我这里我只写相对路径,然后后在通过File.getAbsolutePath()获取文件全路径。

2.创建一个控制器LogController

RestController
@RequestMapping("/log")
public class LogController {

    @Autowired
    LogService logService;

    @PostMapping(value = "/upload")
    public ResultVo logUpload(@RequestParam("file") MultipartFile file) throws Exception {
        return logService.upLogLoad(file);
    }

}

3.然后我们就可以启动项目,访问对应的url。

我用postman测试如下

 然后就能看到我们上传的文件了

 二、下载

1.在LogService文件基础上,新增logDownload方法

 /**
     * 下载文件
     * @param name
     * @param response
     * @return
     * @throws Exception
     */
    public ResultVo logDownload(String name, HttpServletResponse response) throws Exception {
        //根据name,找到文件目录下,对应的文件
        File file = new File("src/main/java/com/example/thyy/file/" + File.separator + name);
        if (!file.exists()) {
            return ResultVo.error(1, name + "文件不存在");
        }
//        声明传输的内内容类型
        response.setContentType("application/force-download");
        response.addHeader("Content-Disposition", "attachment;fileName=" + name);

        byte[] buffer = new byte[1024];
        try (FileInputStream fis = new FileInputStream(file);
             BufferedInputStream bis = new BufferedInputStream(fis)) {
            OutputStream os = response.getOutputStream();
            int i = bis.read(buffer);
            while (i != -1) {
                os.write(buffer, 0, i);
                i = bis.read(buffer);
            }
        }
        return ResultVo.success();
    }

2.在LogController文件基础上,新增logDownload方法


    @GetMapping(value = "/downlod/{name}")
    public ResultVo logDownload(@PathVariable String name, HttpServletResponse response) throws Exception {
        return logService.logDownload(name, response);
    }

3.访问下载url 

url正确时

url错误时

 注意:在下载URL后加上我们要下载的文件名。

三、解析xls文件

1.导入poi.jar包

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.9</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.9</version>
</dependency>

 为方便写测试,再httpclient包

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.6</version>
        </dependency>

2.创建一个解析xls的工具类

public class HandleFile{


    /**
     * 解析Excel文件
     *
     * @param in
     * @param fileName
     */
    public static List<List<Object>> parseExcel(InputStream in, String fileName) throws Exception {
        List list = null;
        Workbook work = null;
        list = new ArrayList<>();
        //创建Excel工作薄
        work = getWorkbook(in, fileName);
        if (null == work) {
            throw new Exception("创建Excel工作薄为空!");
        }
        Sheet sheet = null;
        Row row = null;
        Cell cell = null;

        for (int i = 0; i < work.getNumberOfSheets(); i++) {
            sheet = work.getSheetAt(i);
            if (sheet == null) {
                continue;
            }

            for (int j = sheet.getFirstRowNum(); j <= sheet.getLastRowNum(); j++) {
                row = sheet.getRow(j);
                if (row == null || row.getFirstCellNum() == j) {
                    continue;
                }

                List<Object> li = new ArrayList<>();
                for (int y = row.getFirstCellNum(); y < row.getLastCellNum(); y++) {
                    String value = "";
                    cell = row.getCell(y);
                    switch (cell.getCellType()) {
                        // 数字
                        case HSSFCell.CELL_TYPE_NUMERIC:
                            //如果为时间格式的内容
                            if (HSSFDateUtil.isCellDateFormatted(cell)) {
                                //注:format格式 yyyy-MM-dd hh:mm:ss 中小时为12小时制,若要24小时制,则把小h变为H即可,yyyy-MM-dd HH:mm:ss
                                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                                value=sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue())).toString();
                                li.add(value);
                                break;
                            }else {
                                value= String.valueOf(cell.getNumericCellValue());
                                String[] split = value.split("\\.");
                                //整型不保留小数部分
                                if (split[1].length()==1 && split[1].equals("0")){
                                    value = split[0];
                                    li.add(value);
                                    break;
                                }
                                li.add(value);
                                break;
                            }
                            // 字符串
                        case HSSFCell.CELL_TYPE_STRING:
                            value = cell.getStringCellValue();
                            li.add(value);
                            break;
                        // Boolean
                        case HSSFCell.CELL_TYPE_BOOLEAN:
                            value = cell.getBooleanCellValue() + "";
                            li.add(value);
                            break;
                        // 公式
                        case HSSFCell.CELL_TYPE_FORMULA:
                            value = cell.getCellFormula() + "";
                            li.add(value);
                            break;
                        // 空值
                        case HSSFCell.CELL_TYPE_BLANK:
                            value = "";
                            li.add(value);
                            break;
                        // 故障
                        case HSSFCell.CELL_TYPE_ERROR:
                            value = "非法字符";
                            li.add(value);
                            break;
                        default:
                            value = "未知类型";
                            li.add(value);
                            break;
                    }
                }
                list.add(li);
            }
        }
        return list;

    }


    /**
     * 判断文件格式
     *
     * @param inStr
     * @param fileName
     * @return
     * @throws Exception
     */
    public static Workbook getWorkbook(InputStream inStr, String fileName) throws Exception {
        Workbook workbook = null;
        String fileType = fileName.substring(fileName.lastIndexOf("."));
        if (".xls".equals(fileType)) {
            workbook = new HSSFWorkbook(inStr);
        } else if (".xlsx".equals(fileType)) {
            workbook = new XSSFWorkbook(inStr);
        } else {
            throw new Exception("请上传excel文件!");
        }
        return workbook;
    }

}

3.使用HandleFile工具类

写个测试类

 @Test
 public void testExel() throws Exception {
//       File file= new File("C:/Users/Administrator/Documents/新建 XLS 工作表.xls");
        File file = new File("C:/Users/Administrator/Documents/Tencent Files/229068393/FileRecv/202110-205.xlsx");
        if (!file.exists()) {
            throw new Exception("不存在文件");
        }
        try {
            FileInputStream fileInputStream = new FileInputStream(file);
            MultipartFile multipartFile = new MockMultipartFile("copy" + file.getName(), file.getName(), ContentType.APPLICATION_OCTET_STREAM.toString(), fileInputStream);
            InputStream inputStream = multipartFile.getInputStream();
            //将文件的所有数据处理成了List<List<Object>> list
            List<List<Object>> list = HandleFile.parseExcel(inputStream, multipartFile.getOriginalFilename());
            inputStream.close();
            for (int i = 0; i < list.size(); i++) {
                List<Object> lo = list.get(i);
                System.out.println(lo);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

注意:file是我们要解析的文件的路径

然后我们就得到了文件的内容了 

3.改造一下LogService.upLogLoad方法,实现文件上传+文件解析

 /**
     * 文件上传
     *
     * @param file
     * @return
     * @throws Exception
     */
    public ResultVo upLogLoad(MultipartFile file) throws Exception {
        if (file == null || file.isEmpty()) {
            return ResultVo.error(1, "未选择需上传的日志文件");
        }
        //获取绝对路径
        String filePath = new File("src/main/java/com/example/springboot4/file").getAbsolutePath();
        //获取上传时文件名
        String fileName = file.getOriginalFilename();
        //判断文件类型,这里我们只要xls文件
        if (fileName != null && !fileName.endsWith(".xls"))
            return ResultVo.error(1, "请选择“xls”文件");
        //获取文件上传名称
        File fileUpload = new File(filePath, fileName);
        if (fileUpload.exists()) {
            return ResultVo.error(1, "上传的日志文件已存在");
        }


//改造start
        InputStream inputStream = file.getInputStream();
        List<List<Object>> list = HandleFile.parseExcel(inputStream, file.getOriginalFilename());
        inputStream.close();
        for (int i = 0; i < list.size(); i++) {
            List<Object> lo = list.get(i);
            //可以将数据遍历出来后,存储到数据库中
            System.out.println(lo);
        }
//改造end


        //上传文件
        try {
            file.transferTo(fileUpload);
            return ResultVo.success();
        } catch (IOException e) {
            return ResultVo.error(1, "上传日志文件到服务器失败" + e.toString());
        }


    }

4.最后启动服务,再上传一次文件

四、生成Excel文件

1、场景描述

比如我想导入下面的list集合数据到Excel。

 2、新建@Excel注解

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 自定义导出Excel数据注解
 * @author sugar
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Excel
{
    /**
     * 导出到Excel中时,列的名字.默认值为“未命名”
     */
    public String name() default "未命名";

}

 3、实体类上使用注解

package com.example.springboot4.entity;

import com.example.springboot4.annotation.Excel;

/**
 * 三年消耗量
 */
public class ConsumptionEntity {
    @Excel(name="物料")
    public String material;
    @Excel(name="组织")
    public String org;
    @Excel(name="数量")
    public String qty;
    @Excel(name="金额")
    public String amount;

    public ConsumptionEntity() {
    }
    public ConsumptionEntity(String material, String org, String qty, String amount) {
        this.material = material;
        this.org = org;
        this.qty = qty;
        this.amount = amount;
    }

    @Override
    public String toString() {
        return "ConsumptionEntity{" +
                "material='" + material + '\'' +
                ", org='" + org + '\'' +
                ", qty='" + qty + '\'' +
                ", amount='" + amount + '\'' +
                '}';
    }

    public String getMaterial() {
        return material;
    }

    public void setMaterial(String material) {
        this.material = material;
    }

    public String getOrg() {
        return org;
    }

    public void setOrg(String org) {
        this.org = org;
    }

    public String getQty() {
        return qty;
    }

    public void setQty(String qty) {
        this.qty = qty;
    }

    public String getAmount() {
        return amount;
    }

    public void setAmount(String amount) {
        this.amount = amount;
    }
}

注解上name属性是到我们创建表格的时候会用到

4、新建生成表格工具类

package com.example.springboot4.util;

import com.example.springboot4.annotation.Excel;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;

import java.io.OutputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

/**
 * @ClassName: ExportExcelUtil
 * @Description 构造Excel数据工具类
 * @Author sugar
 * @Date 2022/3/1021:55
 */
public class ExportExcelUtil<T> {

    /**
     * 实体对象
     */
    public Class<T> clazz;

    public void exportExcel(String title, List<T> dataset, OutputStream out, String pattern)
            throws Exception {
        // 声明一个工作薄
        HSSFWorkbook workbook = new HSSFWorkbook();
        // 生成一个表格
        HSSFSheet sheet = workbook.createSheet(title);
        // 设置表格默认列宽度为20个字节
        sheet.setDefaultColumnWidth((short) 20);
        // 生成一个样式
        HSSFCellStyle style = workbook.createCellStyle();
        // 设置这些样式
        style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
        style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
        style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
        style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
        style.setBorderRight(HSSFCellStyle.BORDER_THIN);
        style.setBorderTop(HSSFCellStyle.BORDER_THIN);
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        // 生成一个字体
        HSSFFont font = workbook.createFont();
        font.setColor(HSSFColor.VIOLET.index);
        font.setFontHeightInPoints((short) 12);
        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
        // 把字体应用到当前的样式
        style.setFont(font);

        // 生成并设置另一个样式
        HSSFCellStyle style2 = workbook.createCellStyle();
        style2.setFillForegroundColor(HSSFColor.LIGHT_YELLOW.index);
        style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
        style2.setBorderBottom(HSSFCellStyle.BORDER_THIN);
        style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);
        style2.setBorderRight(HSSFCellStyle.BORDER_THIN);
        style2.setBorderTop(HSSFCellStyle.BORDER_THIN);
        style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
        // 生成另一个字体
        HSSFFont font2 = workbook.createFont();
        font2.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
        // 把字体应用到当前的样式
        style2.setFont(font2);

        if (dataset == null || dataset.size() == 0)
            return;

        T tempT = dataset.get(0);
        //得到Object对象所有声明的字段
        Field[] fields = tempT.getClass().getDeclaredFields();
        //得到所有被@Excel注解到的字段
        List<Field> tempFields = new ArrayList<>();
        for (Field field : fields) {
            if (field.isAnnotationPresent(Excel.class)) {
                tempFields.add(field);
            }
        }


        // 产生表格标题行
        HSSFRow row = sheet.createRow(0);
        for (int i = 0; i < tempFields.size(); i++) {
            Excel attr = tempFields.get(i).getAnnotation(Excel.class);
            HSSFCell cell = row.createCell(i);
            cell.setCellStyle(style);
            HSSFRichTextString text = new HSSFRichTextString(attr.name());
            cell.setCellValue(text);
        }
        // 遍历集合数据,产生数据行
        Iterator<T> it = dataset.iterator();
        int index = 0;
        while (it.hasNext()) {
            index++;
            row = sheet.createRow(index);
            T t = (T) it.next();
            for (int i = 0; i < tempFields.size(); i++) {
                //列
                HSSFCell cell = row.createCell(i);
                cell.setCellStyle(style2);
                String fieldName = tempFields.get(i).getName();
                String getMethodName =
                        "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
                Class tCls = t.getClass();
                Method getMethod = tCls.getMethod(getMethodName, new Class[]{});
                Object value = getMethod.invoke(t, new Object[]{});
                // 判断值的类型后进行强制类型转换
                String textValue = null;
                if (value == null) {
                    cell.setCellValue("");
                }
                if (value instanceof Integer) {
                    int intValue = (Integer) value;
                    cell.setCellValue(intValue);
                } else if (value instanceof Float) {
                    float fValue = (Float) value;
                    cell.setCellValue(fValue);
                } else if (value instanceof Double) {
                    double dValue = (Double) value;
                    cell.setCellValue(dValue);
                } else if (value instanceof Long) {
                    long longValue = (Long) value;
                    cell.setCellValue(longValue);
                } else if (value instanceof Date) {
                    Date date = (Date) value;
                    SimpleDateFormat sdf = new SimpleDateFormat(pattern);
                    textValue = sdf.format(date);
                    cell.setCellValue(textValue);
                } else {
                    // 其它数据类型都当作字符串简单处理
                    textValue = value == null ? "" : value.toString();
                    cell.setCellValue(textValue);
                }
            }
        }
        workbook.write(out);
    }

}

5、在LogController新增export功能

  @GetMapping(value = "/export")
    public String exportExcelByTime(HttpServletResponse response) {

        String title = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
        response.reset();
        response.setHeader("Content-disposition", "attachment; filename=" + title + ".xls");
        response.setContentType("application/x-xls");

        ConsumptionEntity consumptionEntity=new ConsumptionEntity("012002","Org-012","2012","2000.3");
        ConsumptionEntity consumptionEntity1=new ConsumptionEntity("012002","Org-012","2012","2000.3");
        ConsumptionEntity consumptionEntity2=new ConsumptionEntity("012002","Org-012","2012","2000.3");
        ConsumptionEntity consumptionEntity3=new ConsumptionEntity("012002","Org-012","2012","2000.3");
        //查询到list数据
        List<ConsumptionEntity> list = new ArrayList<>();
        list.add(consumptionEntity);
        list.add(consumptionEntity1);
        list.add(consumptionEntity2);
        list.add(consumptionEntity3);


        if (list == null || list.size() < 1) {
            return "没有查到数据";
        }
        try {
            // 输出Excel文件
            OutputStream out = response.getOutputStream();
            ExportExcelUtil util = new ExportExcelUtil();
            util.exportExcel(title, list, out, "yyyy-MM-dd");
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "导出成功";
    }

6、最后看效果

 

SpringBoot整合EasyExcel实现Excel导入导出/上传下载至数据库 上一篇写了一个SpringBoot整合poi实现excel导入导出的,但是使用poi会有一些问题,这时阿里带着EasyExcel来了。 Java解析生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。easyexcel重写了poi对07版Excel解析,能够原本一个3M的excel用P 阅读详情

相关推荐

西门子S7-1200 PLC控制步进电机实战:从I/O分配到梯形图,手把手教你实现正反转与调速

本文详细介绍了如何使用西门子S7-1200 PLC控制步进电机,从硬件接线到梯形图编程,实现正反转与三档调速功能。通过I/O分配、脉冲生成逻辑和方向控制等核心步骤,帮助工程师快速掌握PLC控制步进电机的关键技术,提升工业自动化项目的实施效率。

weixin_28733777的博客 487

springboot项目excel表格上传解析

1、pom文件添加maven <!-- excel--> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.1.6</version> </dependenc

LvFengQi的博客 2618

全网唯一OpenCyphal/UAVCAN教程(8)libcanard介绍

当Cyphal里,这个结构体代表一条完整的Cyphal消息,之后我们会根据metadata里提供的元信息,其实就是消息ID,调用对应的反序列化函数,将payload还原成具体的Cyphal消息。用于构造一个新的发送队列,原则上一个can物理接口需要分配一个发送队列,如果它们的MTU大小一致,是可以共用一条的。这个库不包含IO层,是平台无关的,意义是没有实现具体的数据收发,仅提供将发送出去的Cyphal消息转成can帧,以及将收到的can帧转成Cyphal消息。返回值是这条消息拆解成的can帧的数目。....

二进制君 2334

SpringBoot 整合EasyExcel详解(一)-高性能Excel方案

SpringBoot 整合EasyExcel详解

深圳市多克创新科技有限公司 4338

Spring Boot 文件上传详解:深入理解 MultipartFile 的使用与原理

Spring MVC 提供的一个接口,用于接收客户端上传的文件。当前端通过上传文件时,浏览器会采用编码格式发送 HTTP 请求,SpringMVC 会自动解析请求,并封装成对象。MultipartFile 本质上就是 SpringMVC 对上传文件的一层封装。开发者无需自己解析 HTTP 请求体,只需要接收即可。Spring 会自动完成以下工作:接收 HTTP 请求解析 multipart/form-data提取上传文件封装成 MultipartFile。

iov_a的博客 183

SpringBoot实现Excel导入导出,性能爆表,用起来够优雅~

操作Excel实现导入导出是个非常常见的需求,之前介绍了一款非常好用的工具EasyPoi。有读者提出在数据量大的情况下,EasyPoi占用内存大,性能不够好。今天给大家推荐一款性能更好的Excel导入导出工具EasyExcel,希望对大家有所帮助!

macrozheng的专栏 4478

SpringBoot实现Excel读取

SpringBoot实现Excel读取 SpringBoot实现Excel写入在另一篇文章 文章地址: 。。。 这是本人写的一个SpringBootExcel读取的方法,实测能用,待提升的地方有很多,有不足之处请多多指点。 Excel2003版(后缀为.xls)最大行数是65536行,最大列数是256列。 Excel2007以上的版本后缀为.xlsx)最大行数是1048576行,最大列数是16384列。 提供2种方法读取: 1.根据指定的开始和结束行数读取返回结果,结果格式为List<Map&l

qq_45367825的博客 1万+

Excel】使用 SpringBoot 实现 Excel 文件的导入与导出

为了大家能更好地理解这篇博文,在看之前,建议去看看我的上一篇博文:【File】使用 SpringBoot 实现文件的上传与下载 这两篇博文互有联系:文件的导入就是文件的上传;文件的导出就是文件的下载。 至于为什么是 导入/导出 Excel 文件呢?因为 Excel 文件用的频率更多吧。顺便来复习下通过 EasyExcel 来操作 Excel 文件。 ...

sco5282的博客 3万+

SpringBoot + Vue 前后端分离项目实现文件上传至本地以及文件下载功能

SpringBoot + Vue 实现文件上传功能,文件下载功能

欢迎来到Gorit的博客 1万+

SpringBoot用easyExcel实现excel文件上传至数据库与下载数据库数据为Excel

@SpringBoot实现Excel文件上传至数据库与下载数据库数据为Excel 这里是整合poi实现的,后来发现poi有一些缺陷,但这些缺陷被阿里的EasyExcel解决了,于是采用了第二种。 一、第一种(不推荐,推荐下方第二种使用easyExcel) 首先创建一个SpringBoot项目,pom.xml中加入操作Excel需要的jar包 <dependency> <groupId>org.apache.poi</groupId> <artifa

洛水逆风向西 1376

springboot实现excel的上传并解析文件内容

因为老大说表单填写评分太麻烦了,所以就要求我们改成excel表格上传进行评价;所以我一直没写过就只能自己摸索摸索了; 到了今天调试基本没有问题了。下文将是完整的代码,没有涉及到数据库。我现在的目的是先能正确上传并正确的读取数据。 好了,开始了。 首先; 这个是我要测试的表格,最左边还有两列,一列是序列号,一列是姓名,因为考虑到隐私,所以我就屏蔽,如果想跟我的一模一样进行的话自行...

weixin_40593587的博客 2万+

SpringBoot项目中关于Excel生成下载(二)

     最近在做SpringBoot项目,项目中需要上传Excel文件,对Excel文件中的内容进行解析,然后将需要的数据存入数据库,同时还要根据用户的需求,将需要的内容生成Excel文件,并下载下来。本篇主要是介绍Excel文件的生成以及下载,使用的开发工具是IDEA  。关于Excel文件的生成请移步SpringBoot项目中关于Excel解析(一) 内容概要: 项目maven依赖 ...

weixin_40725039的博客 2000

SpringBoot项目中关于Excel解析(一)

    最近在做SpringBoot项目,项目中需要上传Excel文件,对Excel文件中的内容进行解析,然后将需要的数据存入数据库,同时还要根据用户的需求,将需要的内容生成Excel文件,并下载下来。本篇主要是介绍Excel文件的上传,然后对文件进行解析处理的过程。使用的开发工具是IDEA   内容概要: 项目maven依赖 Controller层代码 工具类HandleFile代码 ...

weixin_40725039的博客 3784

Springboot读取远程excel文件地址下载解析文件内容

最近公司有一个下载远程excel文件并解析内容的需求,写完功能之后做个小结。 保存文件 下载远程文件保存到本地 //定义文件名 String fileName = "xxxx"; //远程文件路径 String filePath = "https://www.baidu.com/demo.csv"; //定义要保存的文件路径 String savePaht = "/data/temp/" ...

夏天的思绪 4819

【vue+springbootexcel模板下载、导入功能实现

基于VUE+SpringBoot实现excel模板下载、导入功能 背景 最近在工作中经常遇到批量导入的功能,而且前端还要提示导入成功几条、失败几条、哪一条数据重复、是哪一条导入的数据出现问题等,抽空写了一个简单的demo,记录一下。 框架:前端vue,使用的是element-ui组件,后端springboot 前端代码及效果 因为使用频繁,所以封装了一个文件上传下载的组件,代码如下: <template> <!-- 弹窗,上传文件 --> <el-dialog

tif_very的博客 6216

springboot Excel解析生成玩法

背景:近日,发现了一个解析excelspringboot-starter(pom依赖如下),挺好玩,使用尤其简单,复刻了下代码,了解一下 <dependency> <groupId>com.pig4cloud.excel</groupId> <artifactId>excel-spring-boot-starter</artifactId> <ver

m0_37298602的博客 2017

文件上传下载Excel读写全家桶

一、javaweb实现 upload package com.atqh.Servlet.FileServlet; import com.atqh.utils.ExcelUtil; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.Servle.

大叔的博客 773

Springboot——整合EasyExcel简单读写和文件上传下载

文章目录前言测试案例测试版本依赖配置测试前的类写文件读文件注意1、监听器的区别2、关于UserExcel映射类关于web的上传和下载上传测试下载测试 前言 工作中使用到 EasyExcel 这个框架,用于Excel的导入导出解析操作。 本次博客只写几个常用案例和配置,不做复杂说明。 其他操作,需参考官方文档:EasyExcel 测试案例 测试版本 SpringBoot 2.1.4.RELEASE EasyExcel 3.0.5 依赖配置 <dependency> <groupI

专注写bug 2834

SpringBoot下载xlsx模板,导出excel数据

此文件功能使用SpringBoot来编写,包括写好的前端和后端代码。 使用SpringBoot+POI导出excel数据。 使用SpringBoot导出excel模板文件,防止用户导入错误。 先看是否需要在下载,功能演示都放在这篇文章了:https://truedei.blog.csdn.net/article/details/105325018 下载地址:点我下载 项目结构 controll...

TrueDei 8630

基于Python+Django的京东商品比价系统源码+全部资料(毕业设计).zip

基于Python+Django的京东商品比价系统源码+全部资料(毕业设计).zip已获导师指导并通过的98高分毕业设计项目,也可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。基于Python+Django的京东商品比价系统源码+全部资料(毕业设计).zip已获导师指导并通过的98高分毕业设计项目,也可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。基于Python+Django的京东商品比价系统源码+全部资料(毕业设计).zip已获导师指导并通过的98高分毕业设计项目,也可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。基于Python+Django的京东商品比价系统源码+全部资料(毕业设计).zip已获导师指导并通过的98高分毕业设计项目,也可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。基于Python+Django的京东商品比价系统源码+全部资料(毕业设计).zip已获导师指导并通过的98高分毕业设计项目,也可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。基于Python+Dja

上一篇: 金蝶苍穹,报表查询插件
下一篇: spring自定义注解Excel文档应用场景
金秋0707
博客等级 码龄7年 2粉丝 · 8原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值