spring boot 使用POI导出数据到Excel表格

摘自:https://www.cnblogs.com/hopeofthevillage/p/12099807.html

spring boot 使用POI导出数据到Excel表格

2019-12-26 00:17  全me村的希望  阅读(42)  评论(0)  编辑收藏

  在spring boot 的项目经常碰到将数据导出到Excel表格的需求,而POI技术则对于java操作Excel表格提供了API,POI中对于多种类型的文档都提供了操作的接口,但是其对于Excel表格的操作无疑是最强大的。

  1.POI简介

    Apache POI 是用 Java 编写的免费开源的跨平台的 Java API,Apache POI 提供 API 给 Java 程式对 Microsoft Office(Excel、WORD、PowerPoint、Visio 等,主要实现用于 Excel)格式档案读和写的功能,POI 为 “ Poor Obfuscation Implementation ” 的首字母缩写,意为简洁版的模糊实现。

   POI结构:


1

2

3

4

5

6

7

8

HSSF - 提供读写Microsoft Excel XLS格式档案的功能。

XSSF - 提供读写Microsoft Excel OOXML XLSX格式档案的功能。

HWPF - 提供读写Microsoft Word DOC97格式档案的功能。

XWPF - 提供读写Microsoft Word DOC2003格式档案的功能。

HSLF - 提供读写Microsoft PowerPoint格式档案的功能。

HDGF - 提供读Microsoft Visio格式档案的功能。

HPBF - 提供读Microsoft Publisher格式档案的功能。

HSMF - 提供读Microsoft Outlook格式档案的功能。

  因为使用的是POI对Excel的操作,所以先介绍一下HSSF中的常用类:

类名                     说明
HSSFWorkbook     Excel的文档对象
HSSFSheet           Excel的表单
HSSFRow             Excel的行
HSSFCell              Excel的格子单元
HSSFFont             Excel字体
 HSSFDataFormat  格子单元的日期格式
HSSFHeader          Excel文档Sheet的页眉
HSSFFooter            Excel文档Sheet的页脚
HSSFCellStyle         格子单元样式
HSSFDateUtil           日期
HSSFPrintSetup        打印
 HSSFErrorConstants   错误信息表            

  2.在项目中导入POI的依赖

<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.1</version>
        </dependency>

  3.controller层

@GetMapping("/export")
    public ResponseEntity<byte[]> exportEmp(){
        List list = 数据库查询到所有要导出的数据;
        return EmpUtils.exportEmp(employeeList);
    }

  首先从数据库查询到具体的要导出到Excel的数据,controller层的返回值为ResponseEntity<byte[]>。

  4.Java使用poi的构建Excel表格

public class EmpUtils {

    public static ResponseEntity<byte[]> exportEmp(List<Employee> employeeList) {
        //1.创建一个excel文档
        HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
        //2.创建文档摘要
        hssfWorkbook.createInformationProperties();
        //3.获取并配置文档摘要信息
        DocumentSummaryInformation docInfo = hssfWorkbook.getDocumentSummaryInformation();
        //文档类别
        docInfo.setCategory("XXX信息");
        //文档管理员
        docInfo.setManager("hope");
        //文档所属公司
        docInfo.setCompany("xxxx");
        //文档版本
        docInfo.setApplicationVersion(1);
        //4.获取文档摘要信息
        SummaryInformation summaryInformation = hssfWorkbook.getSummaryInformation();
        //文档标题
        summaryInformation.setAuthor("hopec");
        //文档创建时间
        summaryInformation.setCreateDateTime(new Date());
        //文档备注
        summaryInformation.setComments("文档备注");
        //5.创建样式
        //创建标题行的样式
        HSSFCellStyle headerStyle = hssfWorkbook.createCellStyle();
        //设置该样式的图案颜色为黄色
//        headerStyle.setFillForegroundColor(IndexedColors.GREEN.index);//设置图案颜色
//        headerStyle.setFillBackgroundColor(IndexedColors.RED.index);//设置图案背景色
        headerStyle.setFillForegroundColor(IndexedColors.YELLOW.index);
        //设置图案填充的样式
        headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        //设置日期相关的样式
        HSSFCellStyle dateCellStyle = hssfWorkbook.createCellStyle();
        //这里的m/d/yy 相当于yyyy-MM-dd
        dateCellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy"));
        HSSFSheet sheet = hssfWorkbook.createSheet("xxx信息表");
        //设置每一列的宽度
        sheet.setColumnWidth(0,5*256);
        sheet.setColumnWidth(1,12*256);
        sheet.setColumnWidth(2,10*256);
        sheet.setColumnWidth(3,5*256);
        sheet.setColumnWidth(4,16*256);
        sheet.setColumnWidth(5,20*256);
        sheet.setColumnWidth(6,10*256);
        sheet.setColumnWidth(7,10*256);
        sheet.setColumnWidth(8,18*256);
        sheet.setColumnWidth(9,12*256);
        //6.创建标题行
        HSSFRow r0 = sheet.createRow(0);
        HSSFCell c0 = r0.createCell(0);
        c0.setCellValue("编号");
        c0.setCellStyle(headerStyle);
        HSSFCell c1 = r0.createCell(1);
        c1.setCellStyle(headerStyle);
        c1.setCellValue("姓名");
        HSSFCell c2 = r0.createCell(2);
        c2.setCellStyle(headerStyle);
        c2.setCellValue("工号");
        HSSFCell c3 = r0.createCell(3);
        c3.setCellStyle(headerStyle);
        c3.setCellValue("性别");
        HSSFCell c4 = r0.createCell(4);
        c4.setCellStyle(headerStyle);
        c4.setCellValue("出生日期");
        HSSFCell c5 = r0.createCell(5);
        c5.setCellStyle(headerStyle);
        c5.setCellValue("身份证号码");
        HSSFCell c6 = r0.createCell(6);
        c6.setCellStyle(headerStyle);
        c6.setCellValue("婚姻状况");
        HSSFCell c7 = r0.createCell(7);
        c7.setCellStyle(headerStyle);
        c7.setCellValue("民族");
        HSSFCell c8 = r0.createCell(8);
        c8.setCellStyle(headerStyle);
        c8.setCellValue("籍贯");
        HSSFCell c9 = r0.createCell(9);
        c9.setCellStyle(headerStyle);
        c9.setCellValue("政治面貌");
        HSSFCell c10 = r0.createCell(10);

        for (int i = 0; i < employeeList.size(); i++) {
            Employee employee= employeeList.get(i);
            HSSFRow row = sheet.createRow(i+1);
            row.createCell(0).setCellValue(employee.getId());
            row.createCell(1).setCellValue(employee.getName());
            row.createCell(2).setCellValue(employee.getWorkID());
            row.createCell(3).setCellValue(employee.getGender());
            HSSFCell cell4 = row.createCell(4);
         //单独设置日期的样式
            cell4.setCellStyle(dateCellStyle);
            cell4.setCellValue(employee.getBirthday());
            row.createCell(5).setCellValue(employee.getIdCard());
            row.createCell(6).setCellValue(employee.getWedlock());
            row.createCell(7).setCellValue(employee.getNation().getName());
            row.createCell(8).setCellValue(employee.getNativePlace());
            row.createCell(9).setCellValue(employee.getPoliticsstatus().getName());
        }
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        HttpHeaders headers = new HttpHeaders();
        try {
            //将数据表这几个中文的字转码 防止导出后乱码
            headers.setContentDispositionFormData("attachment",
                    new String("数据表.xls".getBytes("UTF-8"),"ISO-8859-1"));
            headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
            hssfWorkbook.write(stream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return new ResponseEntity<byte[]>(stream.toByteArray(),headers, HttpStatus.CREATED);
    }
}
            

  5.页面调用

exportEmp(){
                this.$confirm(‘此操作将导出员工数据, 是否继续?‘, ‘提示‘, {
                    confirmButtonText: ‘确定‘,
                    cancelButtonText: ‘取消‘,
                    type: ‘warning‘
                }).then(() => {
                    window.open(‘/employee/basic/export‘,‘_parent‘)
                }).catch(() => {
                    this.$message({
                        type: ‘info‘,
                        message: ‘已取消导出‘
                    });
                });
            },

  其中/employee/basic/export为后台接口的restfulAPI地址。

原文地址:https://www.cnblogs.com/xichji/p/12100213.html

时间: 2024-10-10 09:02:57

spring boot 使用POI导出数据到Excel表格的相关文章

导出数据到Excel表格

开发工具与关键技术:Visual Studio 和 ASP.NET.MVC,作者:陈鸿鹏撰写时间:2019年5月25日123下面是我们来学习的导出数据到Excel表格的总结首先在视图层写导出数据的点击事件function 自定义点击事件名(){//然后这里获取当前表格数据的筛选条件var 自定义下拉框名 = $("#下拉框id “).val();//后面根据你的条件数依次写……var 自定义文本框名 = $(”#文本框id ").val(); //然后这里写判断它是否为空 if (自定

C#中导出数据到Excel表格中

之前PM交给我一个自动化测试的Case,让我抓取页面上的数据到Excel表格中,刚好又接了一个之前人家做的系统, 刚好看到可以用NPOI导数据,就动手试试,成功导出. 由于鄙人比较菜,也比较懒, 怕自己忘记了,今天就总结一下,以防下次用可以参考. 1.要使用NPOI,首先需要在Project中Install NPOI的 Package. 右键点击Project------>Manage NuGet Packages---->Search NPOI----->点击搜索到的NPOI然后点击等

java利用poi导出数据到excel

背景: 上一篇写到利用jtds连接数据库获取相应的数据,本篇写如何用poi将数据到处到excel中,此程序为Application 正文: 第三方poi jar包:poi驱动包下载 代码片段: /** * 将数据导出到excel中 * @param data 将要被导入到excel中的数据 * @throws IOException */ public void crateTempFile(ArrayList<LinkedHashMap<String, String>> data)

Python脚本:实现数据库导出数据到excel表格,支持mysql,postergrsql,MongoDB

import xlwt #返回需要导出的对象的集合,根据业务字型实现 def getObjList(): return [] # 制定 表格行 和数据库字段的对应 obj_feild = { 0: 'name', # 表格第一行是名字 1: 'age', # 表格第二行是年龄 2: 'sno', # 表格第三行是学号 3: 'sex', # 表格第四行是性别 } # 制定数据库字段和中文的对应 field_chinese = { 'name':'名字', # 数据库字段 name对应excel表

springboot使用poi导出数据生成excel(.xlsx)文件

前言:在实际开发中经常需要将数据库的数据导出成excel文件,poi方式则是其中一种较为常用的导出框架.简单读取excel文件在之前的一篇有说明 本项目实现需求:user发出一个导出student信息的请求,直接下载包含所有student信息的excel文件到本机.只贴出关键代码,未贴出的很简单,自行脑补 整体流程(服务器端):接收请求------>取出数据库数据------>将数据存成excel临时文件------>通过响应头让浏览器下载此临时文件------>删除临时文件 项目

Java导出数据生成Excel表格

事先准备: 工具类: package com.wazn.learn.util.export; import java.sql.Connection; import java.sql.DriverManager; public class DbUtil { private String dbUrl="jdbc:mysql://localhost:3306/basepro"; private String dbUserName="user"; private Strin

pl/sql developer导出数据到excel的方法

http://yedward.net/?id=92 问题说明:使用pl/sql developer导出数据到excel表格中是非常有必要的,一般的可能直接在导出的时候选择csv格式即可,因为该格式可以直接用excel打开.但是,在导出的时候出现了这样的问题,导出成csv格式的时候出现了数据乱码,而导出为xml或者html的时候却不会出现问题. 图1:pl/sql developer导出为csv出现乱码 问题解析:出现上面的问题,可能是字符集的设置问题.我找到了一些其他的数据导出方法,下面一一列出

Java导出数据为EXCEL的两种方式JXL和POI

JXL和POI导出数据方式的比较 POI支持excel2003和2007,而jxl只支持excel2003. 下面为测试代码: Java代码   public class TestCondition { /** * 生成的记录条数 */ public static final int RECORD_COUNT = 21000; /** * 模板文件 */ public static final String TEMPLATE_FILE = "E:/MyKernelPlatformWorkspac

NPOI导出数据到Excel

NPOI导出数据到Excel 前言 Asp.net操作Excel已经是老生长谈的事情了,可下面我说的这个NPOI操作Excel,应该是最好的方案了,没有之一,使用NPOI能够帮助开发者在没有安装微软Office的情况下读写Office 97-2003的文件,支持的文件格式包括xls, doc, ppt等.NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office的情况下对Word/Excel文档进行读写操作. 方法 先去官网:http://npoi.codeplex.com/下载需要