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对象,进行字体、颜色、居中、表格宽度等样式
浏览器访问结果:
导出结果: