java使用POI解析2007以上的Excel表格

时间:2023-03-09 19:11:36
java使用POI解析2007以上的Excel表格

来自http://hao0610.iteye.com/blog/1160678

使用poi来解析Excel的xls和xlsx。

解析xls:

  1. package xls;
  2. import java.io.FileInputStream;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import org.apache.poi.hssf.usermodel.HSSFCell;
  6. import org.apache.poi.hssf.usermodel.HSSFRow;
  7. import org.apache.poi.hssf.usermodel.HSSFSheet;
  8. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  9. public class XlsMain {
  10. public static void main( String[] args) throws IOException {
  11. XlsMain xlsMain = new XlsMain();
  12. xlsMain.readXls();
  13. }
  14. private void readXls() throws IOException{
  15. InputStream is = new FileInputStream( "D:\\excel\\xls_test2.xls");
  16. HSSFWorkbook hssfWorkbook = new HSSFWorkbook( is);
  17. // 循环工作表Sheet
  18. for(int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++){
  19. HSSFSheet hssfSheet = hssfWorkbook.getSheetAt( numSheet);
  20. if(hssfSheet == null){
  21. continue;
  22. }
  23. // 循环行Row
  24. for(int rowNum = 0; rowNum <= hssfSheet.getLastRowNum(); rowNum++){
  25. HSSFRow hssfRow = hssfSheet.getRow( rowNum);
  26. if(hssfRow == null){
  27. continue;
  28. }
  29. // 循环列Cell
  30. for(int cellNum = 0; cellNum <= hssfRow.getLastCellNum(); cellNum++){
  31. HSSFCell hssfCell = hssfRow.getCell( cellNum);
  32. if(hssfCell == null){
  33. continue;
  34. }
  35. System.out.print("    " + getValue( hssfCell));
  36. }
  37. System.out.println();
  38. }
  39. }
  40. }
  41. @SuppressWarnings("static-access")
  42. private String getValue(HSSFCell hssfCell){
  43. if(hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN){
  44. return String.valueOf( hssfCell.getBooleanCellValue());
  45. }else if(hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC){
  46. return String.valueOf( hssfCell.getNumericCellValue());
  47. }else{
  48. return String.valueOf( hssfCell.getStringCellValue());
  49. }
  50. }
  51. }

解析xlsx:

    1. package xlsx;
    2. import java.io.IOException;
    3. import org.apache.poi.xssf.usermodel.XSSFCell;
    4. import org.apache.poi.xssf.usermodel.XSSFRow;
    5. import org.apache.poi.xssf.usermodel.XSSFSheet;
    6. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    7. public class XlsxMain {
    8. public static void main( String[] args) throws IOException {
    9. XlsxMain xlsxMain = new XlsxMain();
    10. xlsxMain.readXlsx();
    11. }
    12. private void readXlsx() throws IOException{
    13. String fileName = "D:\\excel\\xlsx_test.xlsx";
    14. XSSFWorkbook xssfWorkbook = new XSSFWorkbook( fileName);
    15. // 循环工作表Sheet
    16. for(int numSheet = 0; numSheet < xssfWorkbook.getNumberOfSheets(); numSheet++){
    17. XSSFSheet xssfSheet = xssfWorkbook.getSheetAt( numSheet);
    18. if(xssfSheet == null){
    19. continue;
    20. }
    21. // 循环行Row
    22. for(int rowNum = 0; rowNum <= xssfSheet.getLastRowNum(); rowNum++ ){
    23. XSSFRow xssfRow = xssfSheet.getRow( rowNum);
    24. if(xssfRow == null){
    25. continue;
    26. }
    27. // 循环列Cell
    28. for(int cellNum = 0; cellNum <= xssfRow.getLastCellNum(); cellNum++){
    29. XSSFCell xssfCell = xssfRow.getCell( cellNum);
    30. if(xssfCell == null){
    31. continue;
    32. }
    33. System.out.print("   "+getValue(xssfCell));
    34. }
    35. System.out.println();
    36. }
    37. }
    38. }
    39. @SuppressWarnings("static-access")
    40. private String getValue(XSSFCell xssfCell){
    41. if(xssfCell.getCellType() == xssfCell.CELL_TYPE_BOOLEAN){
    42. return String.valueOf( xssfCell.getBooleanCellValue());
    43. }else if(xssfCell.getCellType() == xssfCell.CELL_TYPE_NUMERIC){
    44. return String.valueOf( xssfCell.getNumericCellValue());
    45. }else{
    46. return String.valueOf( xssfCell.getStringCellValue());
    47. }
    48. }
    49. }