Springboot POI导入导出Excel实例

本文介绍了如何在Java项目中使用ApachePOI库处理Excel文件,包括在pom.xml中引入poi-ooxml依赖,创建用户表,以及实现导出和导入用户数据的工具类,以及控制类中的API调用。
摘要由CSDN通过智能技术生成

1. pom文件导入poi依赖

<dependency>

  <groupId>org.apache.poi</groupId>

  <artifactId>poi-ooxml</artifactId>

  <version>5.0.0</version>

</dependency>

2. 新建一个用户表 

create table boot_user (

  user_id int auto_increment comment '用户ID' primary key,

  user_name varchar(32) null comment '用户名',

  user_sex int default 0 null comment '性别(0:男,1:女)',

  user_age int null comment '年龄',

  user_password varchar(32) null comment '密码',

  user_status int default 0 null comment '状态(0:启用,1禁用)' )  comment '用户表';

3. 导出工具类 

/**
 * 导出工具类
 */
public class ExportUtils {

    public static void ExportBootUser(HttpServletResponse response, String sheetName, String[] title, List<BootUser> bootUserList) {
        //新建文档实例
        XSSFWorkbook workbook = new XSSFWorkbook();

        //在文档中添加表单
        XSSFSheet sheet = workbook.createSheet(sheetName);

        //创建单元格格式,并设置居中
        XSSFCellStyle style = workbook.createCellStyle();
        XSSFCellStyle style2 = workbook.createCellStyle();

        style.setAlignment(HorizontalAlignment.CENTER);
        style2.setAlignment(HorizontalAlignment.CENTER);

        //标题边框
        //下边框
        style.setBorderBottom(BorderStyle.THICK);
        //左边框
        style.setBorderLeft(BorderStyle.THICK);
        //右边框
        style.setBorderRight(BorderStyle.THICK);
        //上边框
        style.setBorderTop(BorderStyle.THICK);

        //普通边框
        //下边框
        style2.setBorderBottom(BorderStyle.THIN);
        //左边框
        style2.setBorderLeft(BorderStyle.THIN);
        //右边框
        style2.setBorderRight(BorderStyle.THIN);
        //上边框
        style2.setBorderTop(BorderStyle.THIN);

        //标题字体
        XSSFFont font = workbook.createFont();
        font.setFontName("仿宋_GB2312");
        font.setBold(true);
        font.setFontHeightInPoints((short) 14);
        font.setColor(Font.COLOR_RED);
        style.setFont(font);

        //创建第一行,用于填充标题
        XSSFRow titleRow = sheet.createRow(0);

        //填充表头标题
        for (int i = 0; i < title.length; i++) {
            sheet.setColumnWidth(i, 18 * 256);
            //创建单元格
            XSSFCell cell = titleRow.createCell(i);
            //设置单元格内容
            cell.setCellValue(title[i]);
            //设置单元格样式
            cell.setCellStyle(style);
        }

        //填充内容
        //行号
        int i = 1;

        XSSFRow row;
        for (BootUser bootUser : bootUserList) {
            //创建行
            row = sheet.createRow(i);

            //创建单元格
            XSSFCell cell0 = row.createCell(0);
            //设置单元格内容
            cell0.setCellValue(bootUser.getUserName());
            //设置单元格样式
            cell0.setCellStyle(style2);

            //创建单元格
            XSSFCell cell1 = row.createCell(1);
            //设置单元格内容
            cell1.setCellValue(bootUser.getUserSex() == 0 ? "男" : "女");
            //设置单元格样式
            cell1.setCellStyle(style2);

            //创建单元格
            XSSFCell cell2 = row.createCell(2);
            //设置单元格内容
            cell2.setCellValue(bootUser.getUserAge());
            //设置单元格样式
            cell2.setCellStyle(style2);

            //创建单元格
            XSSFCell cell3 = row.createCell(3);
            //设置单元格内容
            cell3.setCellValue(bootUser.getUserPassword());
            //设置单元格样式
            cell3.setCellStyle(style2);

            //创建单元格
            XSSFCell cell4 = row.createCell(4);
            //设置单元格内容
            cell4.setCellValue(bootUser.getUserStatus() == 0 ? "启用" : "禁用");
            //设置单元格样式
            cell4.setCellStyle(style2);

            i++;
        }

        //声明输出流
        OutputStream outputStream = null;
        //响应到客户端
        try {
            //表格文件名称
            String fileName = sheetName + ".xlsx";
            //设置响应头
            response.setContentType("application/octet-stream;charset=UTF-8");
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));

            //获取输出流
            outputStream = response.getOutputStream();

            //用文档写输出流
            workbook.write(outputStream);

            //刷新输出流
            outputStream.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //关闭输出流
            if (outputStream != null) {
                try {
                    outputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

4. 导入工具类

/**
 * 导入工具类
 * @Author: CTW
 * @Date: create in 2021/7/24
 */
public class ImportUtils {

    public static void ImportBootUser(MultipartFile file, BootUserService bootUserService) {
        XSSFWorkbook workBook = null;
        try (InputStream inputStream = file.getInputStream()) {
            //读取文件流
            workBook = new XSSFWorkbook(inputStream);
            //读取工作表
            XSSFSheet sheet = workBook.getSheetAt(0);

            for (int i = 1; i <= sheet.getLastRowNum(); i++) {
                //读取行
                XSSFRow row = sheet.getRow(i);

                //读取单元格
                XSSFCell cell0 = row.getCell(0);
                XSSFCell cell1 = row.getCell(1);
                XSSFCell cell2 = row.getCell(2);
                XSSFCell cell3 = row.getCell(3);
                XSSFCell cell4 = row.getCell(4);

                //设置单元格类型
                cell2.setCellType(CellType.STRING);
                cell3.setCellType(CellType.STRING);

                BootUser bootUser = new BootUser();
                bootUser.setUserName(cell0.getStringCellValue());
                bootUser.setUserSex("男".equals(cell1.getStringCellValue().trim()) ? 0 : 1);
                bootUser.setUserAge((int) Float.parseFloat(cell2.getStringCellValue()));
                bootUser.setUserPassword(cell3.getStringCellValue());
                bootUser.setUserStatus("启用".equals(cell4.getStringCellValue().trim()) ? 0 : 1);
				//保存用户数据
                bootUserService.save(bootUser);
                
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (workBook != null) {
                try {
                    workBook.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

5. 控制类

@Api(tags = "用户接口")
@RestController
@RequestMapping("/boot-user")
public class BootUserController {

    @Resource
    private BootUserService bootUserService;

    @ApiOperation("查询全部用户")
    @GetMapping("bootUserList")
    public R<List<BootUser>> bootUserList() {
        return R.ok(bootUserService.list());
    }

    @ApiOperation("导出用户数据")
    @GetMapping("exportBootUser")
    public void exportBootUser(HttpServletResponse response) {
        String sheetName = "用户数据";
        String[] title = {"用户名", "性别", "年龄", "密码", "状态"};
        List<BootUser> bootUserList = bootUserService.list();
        ExportUtils.ExportBootUser(response, sheetName, title, bootUserList);
    }

    @ApiOperation("导入用户数据")
    @PostMapping("importBootUser")
    public void importBootUser(@RequestParam("file") MultipartFile file) {
        ImportUtils.ImportBootUser(file, bootUserService);
    }

}

Spring Boot是一个基于Spring框架的快速开发框架,而POI是一个Java处理Microsoft Office格式文件的开源库。通过结合Spring BootPOI,我们可以实现Excel文件的导入导出功能。 在Spring Boot中使用POI进行Excel文件导入导出,需要先添加POI的依赖。在pom.xml文件中添加以下依赖: ``` <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency> ``` 接下来,我们可以使用POI提供的API来实现Excel文件的导入导出。具体实现方式可以参考以下代码: Excel文件导入: ``` public List<User> importExcel(MultipartFile file) throws IOException { List<User> userList = new ArrayList<>(); Workbook workbook = WorkbookFactory.create(file.getInputStream()); Sheet sheet = workbook.getSheetAt(); for (int i = 1; i <= sheet.getLastRowNum(); i++) { Row row = sheet.getRow(i); User user = new User(); user.setName(row.getCell().getStringCellValue()); user.setAge((int) row.getCell(1).getNumericCellValue()); user.setGender(row.getCell(2).getStringCellValue()); userList.add(user); } return userList; } ``` Excel文件导出: ``` public void exportExcel(List<User> userList, HttpServletResponse response) throws IOException { Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("用户列表"); Row headerRow = sheet.createRow(); headerRow.createCell().setCellValue("姓名"); headerRow.createCell(1).setCellValue("年龄"); headerRow.createCell(2).setCellValue("性别"); for (int i = ; i < userList.size(); i++) { Row row = sheet.createRow(i + 1); row.createCell().setCellValue(userList.get(i).getName()); row.createCell(1).setCellValue(userList.get(i).getAge()); row.createCell(2).setCellValue(userList.get(i).getGender()); } response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-disposition", "attachment;filename=userList.xlsx"); workbook.write(response.getOutputStream()); } ``` 以上代码实现了一个简单的Excel文件导入导出功能。在实际开发中,我们可以根据具体需求进行修改和扩展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光岳楼观景

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值