[Java+EasyExcel implementa la importación y exportación de archivos, la importación y exportación son muy simples]

Java+EasyExcel implementa la importación y exportación de archivos

Introducción

El proyecto necesita importar y exportar archivos de Excel y descargarlos. Por ejemplo, la importación de información de empleados, la exportación de información de empleados y la entrada manual son engorrosas, por lo que esta publicación de blog le enseña cómo importar y exportar archivos de Excel en Java.

pila de tecnología

Herramientas de Excel:EasyExcel

Framework seleccionado: Spring, Spring MVC, MyBatis (SSM)

Herramienta de gestión de compilación de proyectos: Maven

necesidad:

  1. Se requiere el uso de la herramienta Excel para realizar la importación y exportación de la información de los empleados.
  2. El requisito de exportación es enviar a la ubicación especificada y descargar
  3. Después de importar el archivo de importación, se almacena en la base de datos y se muestra en la página
  4. Exporte el archivo, haga clic en Exportar y escriba en la dirección especificada, y descargue el archivo

representaciones

inserte la descripción de la imagen aquí

Estructura del proyecto

inserte la descripción de la imagen aquí

código fuente principal

Importar dependencias de Alibaba EasyExcel

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>2.1.6</version>
</dependency>

EasyExcel se usa aquí, ¿por qué no POI?

Debido a que EasyExcel es una actualización de POI, POI es relativamente voluminoso y EasyExcel elimina algunas cosas engorrosas de POI, por lo que EasyExcel es relativamente liviano, por lo que este artículo usa EasyExcel

EasyExcel es un producto de Alibaba, POI es un producto de código abierto de Apache Foundation y EasyExcel ha realizado una actualización a POI

clase de entidad central

package com.wanshi.spring.entity;

import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Employee {
    
    

    @ExcelIgnore
    private String noid;

    @ColumnWidth(20)
    @ExcelProperty("员工姓名")
    private String emp_name;

    @ColumnWidth(20)
    @ExcelProperty("员工年龄")
    private Integer emp_age;

    @ExcelIgnore
    private Integer emp_sex;

    //冗余字段
    @ColumnWidth(20)
    @ExcelProperty("员工性别")
    private String str_emp_sex;

    @ColumnWidth(20)
    @ExcelProperty("员工工资")
    private Double emp_salary;

    @ColumnWidth(20)
    @ExcelProperty("员工住址")
    private String emp_address;

    @ColumnWidth(20)
    @ExcelProperty("员工岗位")
    private String emp_position;

    //分页相关,当前页与每页的数据条数
    @ExcelIgnore
    private Integer pageNum;
    @ExcelIgnore
    private Integer pageSize;
}

clase de oyente central

Clase EmployeeListener:

package com.wanshi.spring.listener;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.wanshi.spring.entity.Employee;

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

public class EmployeeReadListener extends AnalysisEventListener<Employee> {
    
    

    //员工集合
    private static List<Employee> employeeList = new ArrayList<>();

    // 每读一样,会调用该invoke方法一次
    @Override
    public void invoke(Employee data, AnalysisContext context) {
    
    
        employeeList.add(data);
        System.out.println("解析到一条数据:" + data);
    }

    // 全部读完之后,会调用该方法
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
    
    
        System.out.println("全部解析完成");
    }

    /**
     * 返回读取到的员工集合
     * @return
     */
    public static List<Employee> getStudentList() {
    
    
        return employeeList;
    }
}

Archivo de importación EasyExcel

El archivo de implementación de la clase de prueba de prueba se importa y almacena en la base de datos

@Test
public void test1(){
    
    
    ExcelReaderBuilder workBook = EasyExcel.read
        ("C:\\Users\\王会称\\Desktop\\员工.xlsx", Employee.class, new EmployeeReadListener());

    // 封装工作表
    ExcelReaderSheetBuilder sheet1 = workBook.sheet();
    // 读取
    sheet1.doRead();

    //写入数据库
    List<Employee> studentList = EmployeeReadListener.getStudentList();
    for (Employee employee : studentList) {
    
    
        employee.setNoid(PbSecretUtils.uuid());
        employeeMapper.insert(employee);
    }
}

Haga clic en la página para importar el archivo y guardarlo en la base de datos

Clase de controlador de empleado:

@PostMapping("/import_employee_excel")
public String importEmployeeExcel(MultipartFile emp_excel) {
    
    
    employeeService.importExcel(emp_excel);
    return "redirect:/employee/list";
}

Clase de servicio de empleado:

/**
     * 获取用户选择的文件并将文件存入指定位置再将数据存入数据库
     * @param emp_excel
     * @return
     */
public Integer importExcel(MultipartFile emp_excel) {
    
    
    try {
    
    
        String fileName = FileUploadUtil.upload(emp_excel, "");
        ExcelReaderBuilder workBook = EasyExcel.read
            (GlobalSet.upload_url+fileName, Employee.class, new EmployeeReadListener());

        // 封装工作表
        ExcelReaderSheetBuilder sheet1 = workBook.sheet();
        // 读取
        sheet1.doRead();

        List<Employee> studentList = EmployeeReadListener.getStudentList();
        for (Employee employee : studentList) {
    
    
            employee.setNoid(PbSecretUtils.uuid());
            if ("男".equals(employee.getStr_emp_sex())) {
    
    
                employee.setEmp_sex(1);
            } else {
    
    
                employee.setEmp_sex(2);
            }
            employeeMapper.insert(employee);
        }
    } catch (IOException e) {
    
    
        e.printStackTrace();
    }
    return 0;
}

Archivo de exportación EasyExcel

Pruebe el archivo de exportación de la clase de prueba al archivo especificado

@Test
public void test2() throws FileNotFoundException {
    
    

    List<Employee> employeeList = initData();


    ExcelWriterBuilder workBook = EasyExcel.write(GlobalSet.download_url, Employee.class);

    // sheet方法参数: 工作表的顺序号(从0开始)或者工作表的名字
    workBook.sheet("测试数据表").doWrite(employeeList);
    System.out.println("写入完成!");
}

/**
     * 生成测试数据
     * @return
     */
public List<Employee> initData() {
    
    
    List<Employee> employeeList = new ArrayList<>();
    for (int i = 1; i < 100; i++) {
    
    
        Employee employee = new Employee();
        employee.setEmp_name("小王说:"+i);
        employee.setEmp_age(19);
        if (i % 10 == 0) {
    
    
            employee.setEmp_sex(1);
        } else {
    
    
            employee.setEmp_sex(2);
        }
        employee.setEmp_salary(19999.00+i);
        employee.setEmp_address("北京市朝阳区"+i);
        employee.setEmp_position("Java高级工程师");
        employeeList.add(employee);
    }
    return employeeList;
}

Después de exportar al archivo especificado a través de la página y descargar el archivo

Clase EmployeeController

@GetMapping("/export_employee_excel")
    public void exportEmployeeExcel(HttpServletResponse response) {
    
    
        try {
    
    
            employeeService.exportEmployeeExcel(response);
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }
    }

Clase de servicio de empleado:

public void exportEmployeeExcel(HttpServletResponse response) throws IOException {
    
    
        List<Employee> kspwStudentSeatList = list();
        try {
    
    
            ExcelWriterBuilder workBook = EasyExcel.write(GlobalSet.download_url, Employee.class);
            // sheet方法参数: 工作表的顺序号(从0开始)或者工作表的名字
            workBook.sheet("员工信息").doWrite(kspwStudentSeatList);
            downloadTempalate(response);
            System.out.println("写入完成!");
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
    }

    /**
     * 下载文件
     * @param response
     * @throws IOException
     */
    public static void downloadTempalate(HttpServletResponse response) throws IOException {
    
    
        // 告诉浏览器用什么软件可以打开此文件
        response.setHeader("content-Type", "application/vnd.ms-excel");
        // 下载文件的默认名称
        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("员工信息.xlsx", "utf-8"));
        //4. 创建输入、输出流
        FileInputStream input = new FileInputStream(GlobalSet.download_url);
        ServletOutputStream sos = response.getOutputStream();

        //IO流获取文件的字节流,然后再响应给浏览器
        byte[] arr = new byte[1024];
        int res = 0;
        while((res = input.read(arr)) > 0){
    
    
            //将读取的内容输出到输出流中
            sos.write(arr, 0, res);
        }

        input.close();
        sos.close();
    }

Epílogo

Hasta ahora, los datos se han importado y exportado perfectamente. El caso es fácil de entender y los detalles se presentan paso a paso. A través de este caso, se puede realizar la importación y exportación básica de archivos. Eres muy deslumbrante si estudias duro. Creo que su tecnología definitivamente tendrá un salto cualitativo. Bueno, el intercambio de tecnología de esta semana termina aquí

Lo he visto todo aquí, ¿estás seguro de que no te gusta?

Si encuentra dificultades técnicas en este proyecto, puede dejar un mensaje en el área de comentarios a continuación o enviarme un mensaje privado. Es mejor enseñarle a un hombre a pescar que enseñarle a pescar.

Dirección del disco de red de Baidu: enlace: https://pan.baidu.com/s/1vmrL7vl5Hlq-SqjdndOKyQ Código de extracción: me3n

Si cree que la escritura del blogger es buena, también podría dar un enlace de tres con un clic, haga clic en el puño pequeño a continuación para un enlace de tres con un clic.

¡gracias por tu apoyo!

Supongo que te gusta

Origin blog.csdn.net/weixin_45526437/article/details/122021373
Recomendado
Clasificación