开始
1. 需要引入依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.2</version>
</dependency>
2. 核心代码
// 创建一个工作簿,也就是Excel文件
HSSFWorkbook wb = new HSSFWorkbook();
// 创建一个工作表
HSSFSheet sheet = wb.createSheet();
// 创建一行
HSSFRow row = sheet.createRow(0);
// 创建这一行的第一个单元格
HSSFCell cell = row.createCell(0);
// 设置单元格的内容
cell.setCellValue("你好!");
// 输出文件
// 创建字节输出流
File file = new File("D://excel.xls");
FileOutputStream fos = new FileOutputStream(file);
wb.write(fos);
fos.flush();
fos.close();
注意:这里的工作表指的是图1-1。
运行结果:
模拟实现数据导出
现在你完成了往一个单元格里写数据,如果想要做成一个表格,那就需要循环。
例如现在有一个需求:现在要统计学生的签到情况,需要把学生的签到记录导出到Excel表中。
这里我们用假数据模拟,首先是实体类。
public class CheckExcel {
private String name;//姓名
private Integer number;//学号
private Date checkTime;//签到时间
}
主体程序:
public class ToExcel {
static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static void getExcel(List<CheckExcel> object) {
//创建一个工作簿,也就是Excel文件
HSSFWorkbook wb = new HSSFWorkbook();
//创建一个工作表
HSSFSheet sheet = wb.createSheet();
//第一行,标题
HSSFRow row0 = sheet.createRow(0);
HSSFCell cell0 = row0.createCell(0);
cell0.setCellValue(object.get(0).getCheckName() + "签到统计表");
//第二行,表头
HSSFRow row1 = sheet.createRow(1);
row1.setRowStyle(style);
row1.createCell(0).setCellValue("姓名");
row1.createCell(1).setCellValue("学号");
row1.createCell(2).setCellValue("签到时间");
//表中数据
int rowInt = 2;
for (CheckExcel obj : object) {
HSSFRow row = sheet.createRow(rowInt++);
int cellInt = 0;
row.createCell(cellInt++).setCellValue(obj.getName());
row.createCell(cellInt++).setCellValue(obj.getNumber());
row.createCell(cellInt).setCellValue(sdf.format(obj.getCheckTime()));//将日期转换成字符串,要不然存的是一个时间戳
}
try {
//输出文件
//创建字节输出流
File file = new File("D://excel.xls");
FileOutputStream fos = new FileOutputStream(file);
wb.write(fos);
fos.flush();
fos.close();
} catch (IOException e) {
e.printStackTrace();
System.out.println("ToExcel.getExcel");
System.out.println("IO出异常了");
}
}
public static void main(String[] args) {
List<CheckExcel> stu = new ArrayList<>();
stu.add(new CheckExcel("学生1", 1001, "高等数学", new Date()));
stu.add(new CheckExcel("学生2", 1002, "高等数学", new Date()));
stu.add(new CheckExcel("学生3", 1003, "高等数学", new Date()));
getExcel(stu);
}
}
运行结果:
但是细心的你会发现这个表格没有居中,看起来样式很不好看,这就需要用到HSSFCellStyle
设置表格的样式,具体样式设置有很多就不给大家一一演示了,这里放一个链接供大家去参考:
HSSFCellStyle (POI API Documentation)
但是这个框架比较消耗性能,所以我们可以使用alibaba的easyexcel框架:
Java之Excel导出功能快速实现 - 掘金
公司大佬对excel导入、导出的封装,那叫一个秒啊 - 掘金