POI - the Java API for Microsoft Documents
1.在Apache官網下載Apache最新poi版本:poi-bin-3.11-20141221.zip,解壓;
這里要注意是在binary distribution 下載,binary distribution是jar包,source distribution是包含源文件的,可以打開java代碼
2.在Eclipse中引入jar包:project—properties—Libraries—Add External JARs
Apache官網提供了一些例子:http://poi.apache.org/spreadsheet/quick-guide.html
注意:使用POI擴展包的時候出現“POI java.lang.NoClassDefFoundError: org/apache/xmlbeans/XmlException”異常,一般是由於POI的其中一個名為“xmlbeans-2.3.0.jar”(或其他版本)的擴展包沒有添加到項目的Library里面。在poi-3.11中是在ooxml-lib
Example Code:(以讀取桌面excel交易表為例,路徑由dataPath傳入)
public static Map<String, ArrayList<String>> readExcelData(String dataPath) throws IOException { InputStream is = new FileInputStream(dataPath); @SuppressWarnings("resource") XSSFWorkbook wb = new XSSFWorkbook(is); XSSFSheet sheet = wb.getSheetAt(0); // 獲取第一個sheet表 XSSFRow rowData; Map<String, ArrayList<String>> resultData = new HashMap<String, ArrayList<String>>(); String trans_key = null; String item; for (int i = sheet.getTopRow(); i < sheet.getLastRowNum() + 1; i++) { rowData = sheet.getRow(i); if (i == sheet.getTopRow()) { continue; //標題不讀入 } ArrayList<String> trans_item = new ArrayList<String>(); for (int j = rowData.getFirstCellNum(); j < rowData.getLastCellNum(); j++) { if (j == rowData.getFirstCellNum()) { trans_key = rowData.getCell(j).toString(); } else { item = rowData.getCell(j).toString(); trans_item.add(item); } } resultData.put(trans_key, trans_item); } is.close(); return resultData; }
TODO:有個小問題,
rowData.getLastCellNum()返回的時列數,比如里面有兩列,則返回2;但是sheet.getLastRowNum()卻不是行數,而是最后一行的位置,如果要活的確切行數的話,則需要+1;