poi导出Excel-java

   最近在工作中写一个小功能,要求使用Poi,以流的形式将结果返回到前端,访问时弹出下载框,实现下载数据到Excel表格的功能,在这里记录下来.......

使用的工具:Spring-Tool-Suite

1.1、首先创建一个springBoot工程并导入所需依赖的jar包

     在这里只需要导入poi就可以了

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

1.2 Jakarta POI HSSF API组件

HSSF(用于操作Excel的组件)提供给用户使用的对象在rg.apache.poi.hssf.usermodel包中,主要部分包括Excel对象,样式和格式,还有辅助操作。有以下几种对象: 

常用组件:

HSSFWorkbook                      excel的文档对象

HSSFSheet                         excel的表单

HSSFRow                           excel的行

HSSFCell                          excel的格子单元

HSSFFont                          excel字体

HSSFDataFormat                    日期格式

HSSFHeader                        sheet头

HSSFFooter                        sheet尾(只有打印的时候才能看到效果)

样式:

HSSFCellStyle                       cell样式

辅助操作包括:

HSSFDateUtil                        日期

HSSFPrintSetup                      打印

HSSFErrorConstants                  错误信息表

2、简单代码如下

      2.1、service层

package com.example.demo.tool;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.stereotype.Service;

import com.example.demo.Student.Student;

/**
 * 下载excel的工具类
 * @author 初心
 *
 */
@Service
public class DownExcelService  {
    HSSFWorkbook workBook=new HSSFWorkbook();  //创建工作簿对象
    HSSFSheet sheet=workBook.createSheet() ;//创建工作表,workBook.createSheet(sheetname) 可以为表取个名字
    public HSSFWorkbook createBook(List<Student> list,String[] column) {
        /**
         * 创建表头
         */
        getRow(column);
        /**
         * 将数据写入表中
         */int index=1;
        for(Student student:list) {
            String[] stuColumn= {student.getId(),student.getName(),student.getSex(),student.getJob()};
            HSSFRow  row=sheet.createRow(index);
            for(int cellNum=0;cellNum<list.size();cellNum++) {
            HSSFCell cell=row.createCell(cellNum); 
            cell.setCellValue(stuColumn[cellNum]);
        }
            index++;
        }
        return workBook;
    }
    /**
     * 
     * @param column 表头字段所在的数组
     * @return 返回表头行
     */
    public HSSFRow getRow(String[] column) {
        /**
         * 在表中创建行,参数为行的索引位置
         */
        HSSFRow  row=sheet.createRow(0);
        /**
         * 向表头插入数据
         */
        for(int cellNum=0;cellNum<column.length;cellNum++) {
            HSSFCell cell=row.createCell(cellNum); //创建单元格
            cell.setCellValue(column[cellNum]);//将定义的表头字段写入单元格
        }
        return row;
    }
}

  2.2、controller

package com.example.demo.conttoller;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.example.demo.Student.Student;
import com.example.demo.tool.DownExcelService;

@RestController
public class ExcelController {
    @Autowired
    private DownExcelService tool;
@RequestMapping(value = "/downLoad")
public void downExcel(@RequestParam(name="fileName",defaultValue="hello")String fileName ,HttpServletResponse response) {
    response.setContentType("application/binary;charset=UTF-8");
    response.setHeader("Content-disposition", "attachment; filename=" + fileName + ".xls");
    List<Student> list=new ArrayList<>();
    list.add(new Student("1", "张三","男", "java开发"));
    list.add(new Student("2", "张四","女", "java测试"));
    list.add(new Student("3", "张五","男", "c++开发"));
    list.add(new Student("4", "张六","女", "c++测试"));
    String[] column = {"id","姓名","性别","job"};
    OutputStream out;
    try {
        out = response.getOutputStream();
        HSSFWorkbook workBook=tool.createBook(list, column);
        workBook.write(out);
        out.flush();
        workBook.close();
        out.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
}
 

下载样式可以创建HSSFCellStyle对象,进行字体、颜色、居中、表格宽度等样式

浏览器访问结果:

poi导出Excel-java

导出结果:

poi导出Excel-java