SpringBoot导出excel文件-POI依赖实现

导出excel文件在工作中还是比较常见的的,能够实现的方式有很多
看客:博主有没有最最最简单的方式呢
我:有啊,用真心就可以
来看看我们怎么用真心实现,这里介绍使用POI依赖的HSSF组件实现导出excel文件,为什么介绍这种方式呢,,,问得好,因为我只会这种。。。
准备工作就不多说了,从底层开始咱们捋一遍就好,开始

要用的POI依赖

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

pojo层创建类,其属性和数据库表字段相同,我这里使用的是User类,含有id、userName、address和roleId四个属性

mapper层我使用Mybatis实现查询所有数据

@Mapper
public interface UserMapper {
    @Select("select * from user")
    List<User> getAllUsers();
}

service业务层创建接口和实现类,我这里实现类只作了返回从数据库层查询的所有数据,讲道理这里不该这么做,业务层应该就是封装业务的嘛,但是为了更方便理解和学习,我们把导出excel文件的一些设置放在了controller层,大家之后可以自己想想试试,怎么都放在业务层实现

@Service
public class UserServiceImpl implements UserService{
	@Resource
    private UserMapper userMapper;
    @Override
    public List<User> getAllUser() {
        return userMapper.getAllUsers();
    }
}

controller层,创建一个返回值为空的方法,方法参数为HttpServletResponse类型,这个参数不会从前端接收任何值,就是为导出excel文件做一些最后的设置的和写出的,直接上代码,总共分五步(前两步很弱智,中间两步都一样,最后一步固定用法,简简单单。。),具体解释大家看注解

@Controller
public class controller {
    @Resource
    private UserService userService;
 @RequestMapping("/exportExcel")
    @ResponseBody
    public void exportExcel(HttpServletResponse response){
//        1. 实例HSSFWorkbook对象
        HSSFWorkbook workbook1 = new HSSFWorkbook();

//        2. 创建一个excel文件里的sheet表格
        HSSFSheet sheet = workbook1.createSheet();

//        3. 设置sheet表格里的第一行
        HSSFRow row0 = sheet.createRow(0);
//        设置第一行每个单元格的值
        row0.createCell(0).setCellValue("用户id");
        row0.createCell(1).setCellValue("用户姓名");
        row0.createCell(2).setCellValue("用户地址");
        row0.createCell(3).setCellValue("用户角色id");

//         4. 获得数据库里的数据,也即要导出的数据
        List<User> userList = userService.getAllUsers();
//        循环将他们放入第二、三、四、五......行
        for (int i = 0; i < userList.size(); i++) {
            User user = userList.get(i);
            HSSFRow row = sheet.createRow(i + 1);
//            放入每行的对应单元格
            row.createCell(0).setCellValue(user.getId());
            row.createCell(1).setCellValue(user.getUserName());
            row.createCell(2).setCellValue(user.getAddress());
            row.createCell(3).setCellValue(user.getRoleId());
        }

//          5. 设置导出文件的格式、名字以及写出
        try {
            response.setContentType("application/vnd.ms-excel;charset=utf-8");
//            user_Excel.xls为导出文件的名字
            response.setHeader("Content-Disposition","attachment;filename=user_Excel.xls");
            OutputStream out = response.getOutputStream();
            workbook1.write(out);
//            关闭输出流
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
}

前端创建一个form表单或者ajax或者…没有要求当然怎么简单怎么来!超链接,走起!

<a th:href="@{/exportExcel}">导出excel</a>

导出结果:
在这里插入图片描述
最后说一点注意,如果把对HSSFWorkbook对象的设置放在业务层的话,业务层的返回值要是HSSFWorkbook类型的,controller调用该业务方法接收的变量类型也为HSSFWorkbook类型
HSSF组件还有很多用法,对字体、行高的设置等等;合并单元格也可以使用POI依赖实现,像这样

CellRangeAddress cellRange = new CellRangeAddress(开始行, 结束行, 开始列, 结束列);
// 将要合并的单元格设置到sheet表
sheet.addMergedRegion(cellRange);

大家自己探索吧,加油!

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值