Apache POI是一種流行的API,它允許程序員使用Java程序創建,修改和顯示MS Office文件。這由Apache軟件基金會開發使用Java分佈式設計或修改Microsoft Office文件的開源庫。它包含類和方法對用戶輸入數據或文件到MS Office文檔進行解碼。
HSSF - 提供讀寫Microsoft Excel格式檔案的功能。
XSSF - 提供讀寫Microsoft Excel OOXML格式檔案的功能。
HWPF - 提供讀寫Microsoft Word格式檔案的功能。
HSLF - 提供讀寫Microsoft PowerPoint格式檔案的功能。
HDGF - 提供讀寫Microsoft Visio格式檔案的功能。
Apache POI組件
Apache POI包含類和方法,來將MS Office所有OLE 2文檔複合。此API組件的列表如下。
POIFS (較差混淆技術實現文件系統) : 此組件是所有其他POI元件的基本因素。它被用來明確地讀取不同的文件。
HSSF (可怕的電子表格格式) : 它被用來讀取和寫入MS-Excel文件的xls格式。
XSSF (XML格式) : 它是用於MS-Excel中XLSX文件格式。
HPSF (可怕的屬性設置格式) : 它用來提取MS-Office文件屬性設置。
HWPF (可怕的字處理器格式) : 它是用來讀取和寫入MS-Word的文檔擴展名的文件。
XWPF (XML字處理器格式) : 它是用來讀取和寫入MS-Word的docx擴展名的文件。
HSLF (可怕的幻燈片版式格式) : 它是用於讀取,創建和編輯PowerPoint演示文稿。
HDGF (可怕的圖表格式) : 它包含類和方法爲MS-Visio的二進制文件。
HPBF (可怕的出版商格式) : 它被用來讀取和寫入MS-Publisher文件。
以下是一個Poi生成excel的例子:
package com.h3c.poi.traplib;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
//http://www.yiibai.com/apache_poi/apache_poi_fonts.html
public class ExcelWrite{
public static void main(String[] args) {
//第一步創建workbook
HSSFWorkbook wb = new HSSFWorkbook();
//第二步創建sheet
HSSFSheet sheet = wb.createSheet("測試");
//第三步創建行row:添加表頭0行
HSSFRow row = sheet.createRow(0);
HSSFCellStyle style = wb.createCellStyle();
//style.setAlignment(HSSFCellStyle.ALIGN_CENTER); //居中
HSSFCellStyle style2 = wb.createCellStyle(); //加粗
short s = 2;
HSSFFont font = wb.createFont();
font.setFontHeightInPoints((short) 16);
style2.setFont(font);
//第四步創建單元格
HSSFCell cell = row.createCell(0); //第一個單元格
cell.setCellValue("姓名");
cell.setCellStyle(style2);
cell = row.createCell(1); //第二個單元格
cell.setCellValue("年齡");
cell.setCellStyle(style2);
//第五步插入數據
for (int i = 0; i < 5; i++) {
//創建行
row = sheet.createRow(i+1);
//創建單元格並且添加數據
row.createCell(0).setCellValue("aa"+i);
row.createCell(1).setCellValue(i);
}
//第六步將生成excel文件保存到指定路徑下
try {
FileOutputStream fout = new FileOutputStream("E:\\Excel\\traplib\\trapLib.xls");
wb.write(fout);
fout.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Excel文件生成成功...");
}
}
用到的jar包:
生成的表格:
圖片中的樣式可以根據
POI教程進行調整。
下面是一個讀取excel的例子
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Iterator;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ReadExcelFileToList {
public static void main(String[] args) throws IOException {
String fileName="C:\\Users\\IBM_ADMIN\\Desktop\\promotion\\a.xls";
FileInputStream fis = new FileInputStream(fileName);
Workbook workbook = null;
//判斷excel的兩種格式xls,xlsx
if(fileName.toLowerCase().endsWith("xlsx")){
workbook = new XSSFWorkbook(fis);
}else if(fileName.toLowerCase().endsWith("xls")){
workbook = new HSSFWorkbook(fis);
}
//得到sheet的總數
int numberOfSheets = workbook.getNumberOfSheets();
System.out.println("一共"+numberOfSheets+"個sheet");
//循環每一個sheet
for(int i=0; i < numberOfSheets; i++){
//得到第i個sheet
Sheet sheet = workbook.getSheetAt(i);
System.out.println(sheet.getSheetName()+" sheet");
//得到行的迭代器
Iterator<Row> rowIterator = sheet.iterator();
int rowCount=0;
//循環每一行
while (rowIterator.hasNext())
{
System.out.print("第"+(rowCount++)+"行 ");
//得到一行對象
Row row = rowIterator.next();
//得到列對象
Iterator<Cell> cellIterator = row.cellIterator();
int columnCount=0;
//循環每一列
while (cellIterator.hasNext())
{
//System.out.print("第"+(columnCount++)+"列: ");
//得到單元格對象
Cell cell = cellIterator.next();
//檢查數據類型
switch(cell.getCellType()){
case Cell.CELL_TYPE_STRING:
System.out.print(cell.getStringCellValue()+" ");
break;
case Cell.CELL_TYPE_NUMERIC:
System.out.print(cell.getNumericCellValue()+" ");
}
} //end of cell iterator
System.out.println();
} //end of rows iterator
} //end of sheets for loop
System.out.println("\nread excel successfully...");
//close file input stream
fis.close();
}
}
例子生成的效果: