生成Excel表格
要用 java 生成 Excel表格 ,就先学会怎么生成一个 Excel表格产生数据 和 读取Excel 表格中的数据
由于 Excel表格 的格式有.xls 和 .xlsx, 那么就看下 下面是如何操作的
- 首先需要的jar包
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.15</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.15</version>
</dependency>
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
<version>2.6.0</version>
</dependency>
- 理解下下面将会用到的对象
对象 | 作用 |
---|---|
HSSFWorkbook | excel的文档对象 (07之前的版本) |
HSSFSheet | excel的表单 |
HSSFRow | excel的行 |
HSSFCell | excel的格子单元 |
XSSFWorkbook | excel的文档对象 (07之后的版本) |
- 写测试类
@Test
public void write() throws Exception {
//创建新工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
//新建工作表
HSSFSheet sheet = workbook.createSheet("hello");
//创建行,行号作为参数传递给createRow()方法,第一行从0开始计算
HSSFRow row = sheet.createRow(0);
//创建单元格,row已经确定了行号,列号作为参数传递给createCell(),第一列从0开始计算
HSSFCell cell = row.createCell(2);
//设置单元格的值,即C1的值(第一行,第三列)
cell.setCellValue("hello sheet");
//输出到磁盘中
FileOutputStream fos = new FileOutputStream(new File("F:\\测试.xls"));
workbook.write(fos);
workbook.close();
fos.close();
}
运行如下:
@Test
public void read() throws Exception {
//创建输入流
FileInputStream fis = new FileInputStream(new File("F:\\测试.xls"));
HSSFWorkbook workbook = new HSSFWorkbook(fis);
HSSFSheet sheet = workbook.getSheetAt(0);
//获取行,行号作为参数传递给getRow方法,第一行从0开始计算
HSSFRow row = sheet.getRow(0);
//获取单元格,row已经确定了行号,列号作为参数传递给getCell,第一列从0开始计算
HSSFCell cell = row.getCell(2);
//设置单元格的值(第一行,第三列)
String cellValue = cell.getStringCellValue();
System.out.println("第一行第三列的值是" + cellValue);
workbook.close();
fis.close();
}
运行结果:第一行第三列的值是hello sheet
以上的是.xls 格式, 接着我们在看下 .xlsx格式
@Test
public void write07() throws Exception {
//创建工作簿
XSSFWorkbook workbook = new XSSFWorkbook();
//新建工作表
XSSFSheet sheet = workbook.createSheet("hello");
//创建行,0表示第一行
XSSFRow row = sheet.createRow(0);
//创建单元格行号由row确定,列号作为参数传递给createCell;第一列从0开始计算
XSSFCell cell = row.createCell(2);
//给单元格赋值
cell.setCellValue("hello sheet");
//创建输出流
FileOutputStream fos = new FileOutputStream(new File("F:\\测试.xlsx"));
workbook.write(fos);
workbook.close();
fos.close();
}
@Test
public void read07() throws Exception {
//创建输入流
FileInputStream fis = new FileInputStream(new File("F:\\测试.xlsx"));
//由输入流得到工作簿
XSSFWorkbook workbook = new XSSFWorkbook(fis);
//得到工作表
XSSFSheet sheet = workbook.getSheet("hello");
//得到行,0表示第一行
XSSFRow row = sheet.getRow(0);
//创建单元格行号由row确定,列号作为参数传递给createCell;第一列从0开始计算
XSSFCell cell = row.getCell(2);
//给单元格赋值
String cellValue = cell.getStringCellValue();
System.out.println("值是"+cellValue);
workbook.close();
fis.close();
}
由于在正常的开发项目中,读取的时候,有的用户 用.xls 或者 .xlsx 格式,那么就用以下的方法解决:
boolean is03Excell = filePath.matches("^.+\\.(?i)(xls)$")?true:false;
Workbook workbook = is03Excell ? new HSSFWorkbook(fis):new XSSFWorkbook(fis);