有時候我們在做項目時,有些項目需要生成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文件
運行結果