有时候我们在做项目时,有些项目需要生成Microsoft Excel文件格式的报告。有时,甚至希望将Excel文件作为输入数据。这是我们需要用到Apache POI 。例如,一个公司开发的应用程序将财务部门需要所有输出生成自己的Excel。
创建一个时间格式的单元格
1.编写主方法
public class Demo4 {
public static void main(String[] args) throws Exception {
// 定义一个新的工作簿
Workbook wb = new HSSFWorkbook() ;
// 创建第一个Sheet页
Sheet sheet = wb.createSheet("第一个Sheet页");
// 创建一个行
Row row = sheet.createRow(0) ;
// 创建一个单元格,也就是第一列
Cell cell = row.createCell(0) ;
// 给单元格设置值
cell.setCellValue(new Date()) ;
CreationHelper creationHelper = wb.getCreationHelper() ;
// 单元格样式类
CellStyle cellStyle = wb.createCellStyle() ;
// 设置时间样式
cellStyle.setDataFormat(creationHelper.createDataFormat().getFormat("yyyy-mm-dd hh:mm:ss"));
cell = row.createCell(1) ;
cell.setCellValue(new Date()) ;
cell.setCellStyle(cellStyle) ;
// 定义一个输出流,并指定输出路径
FileOutputStream fileOut = new FileOutputStream("./excel/excel03.xls") ;
// 生成excel 文件
wb.write(fileOut) ;
fileOut.close() ;
}
}
2.运行
打开本目录excel下excel03.xls文件,查看结果
处理不同内容格式的单元格
1.编写主方法
public class Demo5 {
public static void main(String[] args) throws Exception {
// 定义一个新的工作簿
Workbook wb = new HSSFWorkbook() ;
// 创建第一个Sheet页
Sheet sheet = wb.createSheet("第一个Sheet页");
// 创建一个行
Row row = sheet.createRow(0) ;
// 创建一个单元格,也就是第一列
Cell cell = row.createCell(0) ;
// 给单元格设置值
cell.setCellValue(new Date()) ;
// 整行
row.createCell(1).setCellValue(100) ;
// 布尔类型
row.createCell(2).setCellValue("字符串") ;
// 字符串类型
row.createCell(3).setCellValue(true) ;
// 常量
row.createCell(4).setCellValue(HSSFCell.CELL_TYPE_NUMERIC) ;
// 浮点类型
row.createCell(5).setCellValue(12.55);
// 定义一个输出流,并指定输出路径
FileOutputStream fileOut = new FileOutputStream("./excel/excel04.xls") ;
// 生成excel 文件
wb.write(fileOut) ;
fileOut.close() ;
}
}
2.运行
打开本目录excel下excel04.xls文件,查看结果
遍历工作簿的行和列并获取单元格内容
1.编写主方法
public class Demo6 {
public static void main(String[] args) throws Exception {
//输入流
InputStream is = new FileInputStream("./excel/测试.xls") ;
POIFSFileSystem fs = new POIFSFileSystem(is) ;
HSSFWorkbook wb = new HSSFWorkbook(fs) ;
// 获取第一个Sheet页
HSSFSheet hssfSheet = wb.getSheetAt(0) ;
if(hssfSheet==null) {
return ;
}
//遍历行 Row
for (int rowNum = 0; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
HSSFRow hssfRow = hssfSheet.getRow(rowNum) ;
if(hssfRow==null) {
continue ;
}
//遍历列 Cell
for (int cellNum = 0; cellNum <= hssfRow.getLastCellNum(); cellNum++) {
HSSFCell hssfCell = hssfRow.getCell(cellNum) ;
if(hssfCell==null) {
continue ;
}
System.out.print(" "+getValue(hssfCell));
}
System.out.println();
}
}
private static String getValue(HSSFCell hssfCell) {
if(hssfCell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) {
return String.valueOf(hssfCell.getBooleanCellValue()) ;
} else if(hssfCell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
return String.valueOf(hssfCell.getNumericCellValue()) ;
} else {
return String.valueOf(hssfCell.getStringCellValue()) ;
}
}
}
2.运行
打开本目录excel下测试.xls文件
运行结果
文本提取
1.编写主方法
public class Demo7 {
public static void main(String[] args) throws Exception {
//输入流
InputStream is = new FileInputStream("./excel/测试.xls") ;
POIFSFileSystem fs = new POIFSFileSystem(is) ;
HSSFWorkbook wb = new HSSFWorkbook(fs) ;
// 获取第一个Sheet页
ExcelExtractor excelExtractor = new ExcelExtractor(wb) ;
System.out.println(excelExtractor.getText());
}
}
2.运行
打开本目录excel下测试.xls文件
运行结果