Java 使用 POI 對 Excel文件 進行讀寫操作
一、背景
目前正在做一個問卷功能模塊,收集完問卷信息後,需要將數據庫中的數據導出到Excel數據表中進行留存,因此就學習了在Java中如何對Excel表進行讀寫操作。經過了解後選擇了 POI 技術,這個 POI項目是Apache(POI鏈接)下面的一個項目,用於處理Excel和Java的數據對接操作。
二、使用方法
2.1 Excel 文檔結構
對於 Excel 我們並不陌生,它是 Microsoft 公司下的一款表格處理軟件。一個Excel文件的結構層次是:Excel工作簿(也就是我們說的Excel文件) -> 工作表 -> 單元格(一行一列組成一個單元格)。我們通常使用Excel的步驟,總是 新建一個Excel文件,然後建立一個工作表,然後再向工作表中的單元格寫入數據。
2.2 POI對象介紹
Excel文件的結構層次,對應了POI的幾個對象,分別是HSSFWorkbook,HSSFSheet,HSSFRow,HSSFCell。通過這幾個對象,我們就可以處理Excel數據了。一般流程是:首先,新建一個HSSFWorkbook,然後建立一個或者多個HSSFSheet,然後再建立一個或者多個HSSFRow,最後建立一個或者多個HSSFCell。
2.3 寫入數據
// 寫入數據
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 讀取數據
// 讀取數據
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 數據進行基本的格式美化,例如 我們可以設置標題和單元格等的格式樣式 ,以滿足我們的需求。