• java的poi技术读取Excel数据


    这篇blog主要是讲述java中poi读取excel,而excel的版本包括:2003-2007和2010两个版本, 即excel的后缀名为:xls和xlsx。

    读取excel和MySQL相关: java的poi技术读取Excel数据到MySQL 

    你也可以在 : java的poi技术读取和导入Excel 了解到写入Excel的方法信息

    使用JXL技术 : java的jxl技术导入Excel 

    下面是本文的项目结构:

    项目中所需要的jar文件:

    所用的Excel数据(2003-2007,2010都是一样的数据

    运行效果:

    =================================================

    源码部分:

    =================================================

    /Excel2010/src/com/b510/common/Common.java

    复制代码
     1 /**
     2  * 
     3  */
     4 package com.b510.common;
     5 
     6 /**
     7  * @author Hongten
     8  * @created 2014-5-21
     9  */
    10 public class Common {
    11 
    12     public static final String OFFICE_EXCEL_2003_POSTFIX = "xls";
    13     public static final String OFFICE_EXCEL_2010_POSTFIX = "xlsx";
    14 
    15     public static final String EMPTY = "";
    16     public static final String POINT = ".";
    17     public static final String LIB_PATH = "lib";
    18     public static final String STUDENT_INFO_XLS_PATH = LIB_PATH + "/student_info" + POINT + OFFICE_EXCEL_2003_POSTFIX;
    19     public static final String STUDENT_INFO_XLSX_PATH = LIB_PATH + "/student_info" + POINT + OFFICE_EXCEL_2010_POSTFIX;
    20     public static final String NOT_EXCEL_FILE = " : Not the Excel file!";
    21     public static final String PROCESSING = "Processing...";
    22 
    23 }
    复制代码

    /Excel2010/src/com/b510/excel/ReadExcel.java

    复制代码
      1 /**
      2  * 
      3  */
      4 package com.b510.excel;
      5 
      6 import java.io.FileInputStream;
      7 import java.io.IOException;
      8 import java.io.InputStream;
      9 import java.util.ArrayList;
     10 import java.util.List;
     11 
     12 import org.apache.poi.hssf.usermodel.HSSFCell;
     13 import org.apache.poi.hssf.usermodel.HSSFRow;
     14 import org.apache.poi.hssf.usermodel.HSSFSheet;
     15 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
     16 import org.apache.poi.xssf.usermodel.XSSFCell;
     17 import org.apache.poi.xssf.usermodel.XSSFRow;
     18 import org.apache.poi.xssf.usermodel.XSSFSheet;
     19 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
     20 
     21 import com.b510.common.Common;
     22 import com.b510.excel.util.Util;
     23 import com.b510.excel.vo.Student;
     24 
     25 /**
     26  * @author Hongten
     27  * @created 2014-5-20
     28  */
     29 public class ReadExcel {
     30     
     31     /**
     32      * read the Excel file
     33      * @param path the path of the Excel file
     34      * @return
     35      * @throws IOException
     36      */
     37     public List<Student> readExcel(String path) throws IOException {
     38         if (path == null || Common.EMPTY.equals(path)) {
     39             return null;
     40         } else {
     41             String postfix = Util.getPostfix(path);
     42             if (!Common.EMPTY.equals(postfix)) {
     43                 if (Common.OFFICE_EXCEL_2003_POSTFIX.equals(postfix)) {
     44                     return readXls(path);
     45                 } else if (Common.OFFICE_EXCEL_2010_POSTFIX.equals(postfix)) {
     46                     return readXlsx(path);
     47                 }
     48             } else {
     49                 System.out.println(path + Common.NOT_EXCEL_FILE);
     50             }
     51         }
     52         return null;
     53     }
     54 
     55     /**
     56      * Read the Excel 2010
     57      * @param path the path of the excel file
     58      * @return
     59      * @throws IOException
     60      */
     61     public List<Student> readXlsx(String path) throws IOException {
     62         System.out.println(Common.PROCESSING + path);
     63         InputStream is = new FileInputStream(path);
     64         XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);
     65         Student student = null;
     66         List<Student> list = new ArrayList<Student>();
     67         // Read the Sheet
     68         for (int numSheet = 0; numSheet < xssfWorkbook.getNumberOfSheets(); numSheet++) {
     69             XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(numSheet);
     70             if (xssfSheet == null) {
     71                 continue;
     72             }
     73             // Read the Row
     74             for (int rowNum = 1; rowNum <= xssfSheet.getLastRowNum(); rowNum++) {
     75                 XSSFRow xssfRow = xssfSheet.getRow(rowNum);
     76                 if (xssfRow != null) {
     77                     student = new Student();
     78                     XSSFCell no = xssfRow.getCell(0);
     79                     XSSFCell name = xssfRow.getCell(1);
     80                     XSSFCell age = xssfRow.getCell(2);
     81                     XSSFCell score = xssfRow.getCell(3);
     82                     student.setNo(getValue(no));
     83                     student.setName(getValue(name));
     84                     student.setAge(getValue(age));
     85                     student.setScore(Float.valueOf(getValue(score)));
     86                     list.add(student);
     87                 }
     88             }
     89         }
     90         return list;
     91     }
     92 
     93     /**
     94      * Read the Excel 2003-2007
     95      * @param path the path of the Excel
     96      * @return
     97      * @throws IOException
     98      */
     99     public List<Student> readXls(String path) throws IOException {
    100         System.out.println(Common.PROCESSING + path);
    101         InputStream is = new FileInputStream(path);
    102         HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
    103         Student student = null;
    104         List<Student> list = new ArrayList<Student>();
    105         // Read the Sheet
    106         for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) {
    107             HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
    108             if (hssfSheet == null) {
    109                 continue;
    110             }
    111             // Read the Row
    112             for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
    113                 HSSFRow hssfRow = hssfSheet.getRow(rowNum);
    114                 if (hssfRow != null) {
    115                     student = new Student();
    116                     HSSFCell no = hssfRow.getCell(0);
    117                     HSSFCell name = hssfRow.getCell(1);
    118                     HSSFCell age = hssfRow.getCell(2);
    119                     HSSFCell score = hssfRow.getCell(3);
    120                     student.setNo(getValue(no));
    121                     student.setName(getValue(name));
    122                     student.setAge(getValue(age));
    123                     student.setScore(Float.valueOf(getValue(score)));
    124                     list.add(student);
    125                 }
    126             }
    127         }
    128         return list;
    129     }
    130 
    131     @SuppressWarnings("static-access")
    132     private String getValue(XSSFCell xssfRow) {
    133         if (xssfRow.getCellType() == xssfRow.CELL_TYPE_BOOLEAN) {
    134             return String.valueOf(xssfRow.getBooleanCellValue());
    135         } else if (xssfRow.getCellType() == xssfRow.CELL_TYPE_NUMERIC) {
    136             return String.valueOf(xssfRow.getNumericCellValue());
    137         } else {
    138             return String.valueOf(xssfRow.getStringCellValue());
    139         }
    140     }
    141 
    142     @SuppressWarnings("static-access")
    143     private String getValue(HSSFCell hssfCell) {
    144         if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN) {
    145             return String.valueOf(hssfCell.getBooleanCellValue());
    146         } else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC) {
    147             return String.valueOf(hssfCell.getNumericCellValue());
    148         } else {
    149             return String.valueOf(hssfCell.getStringCellValue());
    150         }
    151     }
    152 }
    复制代码

    /Excel2010/src/com/b510/excel/client/Client.java

    复制代码
     1 /**
     2  * 
     3  */
     4 package com.b510.excel.client;
     5 
     6 import java.io.IOException;
     7 import java.util.List;
     8 
     9 import com.b510.common.Common;
    10 import com.b510.excel.ReadExcel;
    11 import com.b510.excel.vo.Student;
    12 
    13 /**
    14  * @author Hongten
    15  * @created 2014-5-21
    16  */
    17 public class Client {
    18 
    19     public static void main(String[] args) throws IOException {
    20         String excel2003_2007 = Common.STUDENT_INFO_XLS_PATH;
    21         String excel2010 = Common.STUDENT_INFO_XLSX_PATH;
    22         // read the 2003-2007 excel
    23         List<Student> list = new ReadExcel().readExcel(excel2003_2007);
    24         if (list != null) {
    25             for (Student student : list) {
    26                 System.out.println("No. : " + student.getNo() + ", name : " + student.getName() + ", age : " + student.getAge() + ", score : " + student.getScore());
    27             }
    28         }
    29         System.out.println("======================================");
    30         // read the 2010 excel
    31         List<Student> list1 = new ReadExcel().readExcel(excel2010);
    32         if (list1 != null) {
    33             for (Student student : list1) {
    34                 System.out.println("No. : " + student.getNo() + ", name : " + student.getName() + ", age : " + student.getAge() + ", score : " + student.getScore());
    35             }
    36         }
    37     }
    38 }
    复制代码

    /Excel2010/src/com/b510/excel/util/Util.java

    复制代码
     1 /**
     2  * 
     3  */
     4 package com.b510.excel.util;
     5 
     6 import com.b510.common.Common;
     7 
     8 /**
     9  * @author Hongten
    10  * @created 2014-5-21
    11  */
    12 public class Util {
    13 
    14     /**
    15      * get postfix of the path
    16      * @param path
    17      * @return
    18      */
    19     public static String getPostfix(String path) {
    20         if (path == null || Common.EMPTY.equals(path.trim())) {
    21             return Common.EMPTY;
    22         }
    23         if (path.contains(Common.POINT)) {
    24             return path.substring(path.lastIndexOf(Common.POINT) + 1, path.length());
    25         }
    26         return Common.EMPTY;
    27     }
    28 }
    复制代码

    /Excel2010/src/com/b510/excel/vo/Student.java

    复制代码
     1 /**
     2  * 
     3  */
     4 package com.b510.excel.vo;
     5 
     6 /**
     7  * Student
     8  * 
     9  * @author Hongten
    10  * @created 2014-5-18
    11  */
    12 public class Student {
    13     /**
    14      * id   
    15      */
    16     private Integer id;
    17     /**
    18      * 学号
    19      */
    20     private String no;
    21     /**
    22      * 姓名
    23      */
    24     private String name;
    25     /**
    26      * 学院
    27      */
    28     private String age;
    29     /**
    30      * 成绩
    31      */
    32     private float score;
    33 
    34     public Integer getId() {
    35         return id;
    36     }
    37 
    38     public void setId(Integer id) {
    39         this.id = id;
    40     }
    41 
    42     public String getNo() {
    43         return no;
    44     }
    45 
    46     public void setNo(String no) {
    47         this.no = no;
    48     }
    49 
    50     public String getName() {
    51         return name;
    52     }
    53 
    54     public void setName(String name) {
    55         this.name = name;
    56     }
    57 
    58     public String getAge() {
    59         return age;
    60     }
    61 
    62     public void setAge(String age) {
    63         this.age = age;
    64     }
    65 
    66     public float getScore() {
    67         return score;
    68     }
    69 
    70     public void setScore(float score) {
    71         this.score = score;
    72     }
    73 
    74 }
  • 相关阅读:
    期望DP入门(p1850换教室)
    P2858 [USACO06FEB]奶牛零食Treats for the Cows
    2019 CCF夏令营 day 2
    2019 CCF夏令营 day 1
    双向存图解题
    P3952 时间复杂度
    P1347 排序(拓扑排序)
    清理Docker垃圾
    k8s中command、args和dockerfile中entrypoint、cmd之间的作用
    kubectl命令自动补全
  • 原文地址:https://www.cnblogs.com/111testing/p/6284455.html
Copyright © 2020-2023  润新知