程序员在旅途

用这生命中的每一秒,给自己一个不后悔的未来!

0%

Java使用POI对Excel文件进行读写操作

一、背景

  目前正在做一个问卷功能模块,收集完问卷信息后,需要将数据库中的数据导出到Excel数据表中进行留存,因此就学习了在Java中如何对Excel表进行读写操作。经过了解后选择了 POI 技术,这个 POI项目是Apache(POI官网链接)下面的一个项目,用于处理Excel和Java的数据对接操作。

二、使用方法

  2.1 Excel 文档结构
  对于 Excel 我们并不陌生,它是 Microsoft 公司下的一款表格处理软件。一个Excel文件的结构层次是:Excel工作簿(也就是我们说的Excel文件) -> 工作表 -> 单元格(一行一列组成一个单元格)。我们通常使用Excel的步骤,总是 新建一个Excel文件,然后建立一个工作表,然后再向工作表中的单元格写入数据。
excel文档结构
  2.2  POI对象介绍
  Excel文件的结构层次,对应了POI的几个对象,分别是HSSFWorkbook,HSSFSheet,HSSFRow,HSSFCell。通过这几个对象,我们就可以处理Excel数据了。一般流程是:首先,新建一个HSSFWorkbook,然后建立一个或者多个HSSFSheet,然后再建立一个或者多个HSSFRow,最后建立一个或者多个HSSFCell。
  2.3  写入数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// 写入数据
public static void poiWrite() {
//新建 Excel工作簿对象
HSSFWorkbook workbook = new HSSFWorkbook();
//新建工作表
HSSFSheet sheet = workbook.createSheet("test");
//建立表格的行
HSSFRow rHssfRow = sheet.createRow(0);
//建立表格的列,这样行列数据有了,就确定了一个单元格,可以写入数据了
HSSFCell cell = rHssfRow.createCell(0);
cell.setCellValue("姓名");
//写入到具体的文件数据中
FileOutputStream xlsStream = null;
try {
xlsStream = new FileOutputStream(new File("C:\\Users\\itour\\Desktop\\poiTest.xls"));
workbook.write(xlsStream);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if (xlsStream != null) {
try {
xlsStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

  2.4 读取数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// 读取数据
public static void poiRead() {
FileInputStream xlsStream = null;
try {
// Excel工作簿 输入流
xlsStream = new FileInputStream(new File("C:\\Users\\itour\\Desktop\\poiTest.xls"));
// 构造工作簿对象
HSSFWorkbook hssfWorkbook = new HSSFWorkbook(xlsStream);
// 获取工作表,这里获取的是第一个sheet,
// 如果一个工作薄对象有多个sheet的话,就需要遍历获取多个
HSSFSheet sheetAt = hssfWorkbook.getSheetAt(0);
// 获取行,行号作为参数传递给getRow方法
HSSFRow row = sheetAt.getRow(0);
// 获取单元格,row已经确定了行号,列号作为参数传递给getCell,就可以获得相应的单元格了
HSSFCell cell = row.getCell(0);
// 获取单元格的值
String cellValue = cell.getStringCellValue();
System.out.println("获取到的数据是:" + cellValue);

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if (xlsStream != null) {
try {
xlsStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

  结果如下图:
读取到的数据

三、说明

  1,上面只是一个最简单的案例,如果想要了解进一步的操作,可以查看官方文档。
  2,POI 可以对 Excel 数据进行基本的格式美化,例如 我们可以设置标题和单元格等的格式样式 ,以满足我们的需求。