通过POI组件从Excel表中读数据

最近要实现一个数据从Excel文件导入与导出功能,使用到了POI组件,从网上找到的代码(感谢原作者),给大家参考下。
以下功能实现的是从Excel文件中读取数据。
Excel:
姓名性别年龄班级成绩
张三23一班94
李四20二班92
王五21五班87
赵六22三班83


Bean:
  1. [code]package com.way.poi.bean;

  2. public class Student {

  3. private String name;
  4. private String gender;
  5. private int age;
  6. private String sclass;
  7. private int score;

  8. public Student(){
  9. super();
  10. }

  11. public Student(String name, String gender, int age, String sclass, int score) {
  12. super();
  13. this.name = name;
  14. this.gender = gender;
  15. this.age = age;
  16. this.sclass = sclass;
  17. this.score = score;
  18. }

  19. public String toString(){
  20. return "Student [age= " + age +",gender= " + gender +",name= " + name +",sclass= " + sclass +",score= " + score +"]";
  21. }

  22. public String getName() {
  23. return name;
  24. }
  25. public void setName(String name) {
  26. this.name = name;
  27. }
  28. public String getGender() {
  29. return gender;
  30. }
  31. public void setGender(String gender) {
  32. this.gender = gender;
  33. }
  34. public int getAge() {
  35. return age;
  36. }
  37. public void setAge(int age) {
  38. this.age = age;
  39. }
  40. public String getSclass() {
  41. return sclass;
  42. }
  43. public void setSclass(String sclass) {
  44. this.sclass = sclass;
  45. }
  46. public int getScore() {
  47. return score;
  48. }
  49. public void setScore(int score) {
  50. this.score = score;
  51. }


  52. }
复制代码
[/code]
下面是操作类:ReadExcel
  1. package com.way.poi.readexcel;

  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.util.ArrayList;
  7. import java.util.List;

  8. import org.apache.poi.hssf.usermodel.HSSFCell;
  9. import org.apache.poi.hssf.usermodel.HSSFRow;
  10. import org.apache.poi.hssf.usermodel.HSSFSheet;
  11. import org.apache.poi.hssf.usermodel.HSSFWorkbook;

  12. import com.way.poi.bean.Student;

  13. public class ReadExcel {

  14. private static String path = "student.xls";

  15. //主函数
  16. public static void main(String[] args) {
  17. long start = System.currentTimeMillis();
  18. List<Student> list = readFromExcel(path);
  19. for(Student student : list){
  20. System.out.println(student);
  21. }
  22. long end = System.currentTimeMillis();
  23. System.out.println("耗时:" + (end - start));
  24. }

  25. public static List<Student> readFromExcel(String filePath){
  26. //Excel文件对象
  27. File excelFile = null;

  28. //输入流对象
  29. InputStream is = null;

  30. //单元格,最终按字符串处理
  31. String cellStr = null;

  32. //返回封装对象
  33. List<Student> studentList = new ArrayList<Student>();

  34. //每一个学生对象
  35. Student student = null;

  36. try {
  37. excelFile = new File(filePath);
  38. //获取文件输入流
  39. is = new FileInputStream(excelFile);
  40. //创建Excel文件对象
  41. HSSFWorkbook workBook = new HSSFWorkbook(is);
  42. //取出第一个工作表
  43. HSSFSheet sheet = workBook.getSheetAt(0);
  44. //开始循环遍历行,表头不处理,从1开始
  45. for(int i = 1; i <= sheet.getLastRowNum(); i++){
  46. //实例化学生对象
  47. student = new Student();
  48. //获取行对象
  49. HSSFRow row = sheet.getRow(i);
  50. //如果行为空,则不处理
  51. if(row == null){
  52. continue;
  53. }
  54. //循环遍历单元格
  55. for(int j = 0; j < row.getLastCellNum(); j++){
  56. //获取单元格对象
  57. HSSFCell cell = row.getCell(j);
  58. //单元格为空,设置空串
  59. if(cell == null){
  60. cellStr = "";
  61. }else if(cell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN){ //对布尔值处理
  62. cellStr = String.valueOf(cell.getBooleanCellValue());
  63. }else if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){ //对数字值处理
  64. cellStr = cell.getNumericCellValue() + "";
  65. }else{ //其他按字符串处理
  66. cellStr = cell.getStringCellValue();
  67. }

  68. //按照数据出现的位置将数据封装到Bean中
  69. if(j == 0){
  70. student.setName(cellStr);
  71. }else if(j == 1){
  72. student.setGender(cellStr);
  73. }else if(j == 2){
  74. student.setAge(new Double(cellStr).intValue());
  75. }else if(j == 3){
  76. student.setSclass(cellStr);
  77. }else{
  78. student.setScore(new Double(cellStr).intValue());
  79. }

  80. }
  81. studentList.add(student);
  82. }
  83. } catch (Exception e) {
  84. e.printStackTrace();
  85. }finally{
  86. if(is != null){
  87. try {
  88. is.close();
  89. } catch (IOException e) {
  90. // TODO Auto-generated catch block
  91. e.printStackTrace();
  92. }
  93. }
  94. }

  95. return studentList;
  96. }
  97. }
复制代码

结果:
Student [age= 23,gender= 男,name= 张三,sclass= 一班,score= 94]
Student [age= 20,gender= 女,name= 李四,sclass= 二班,score= 92]
Student [age= 21,gender= 男,name= 王五,sclass= 五班,score= 87]
Student [age= 22,gender= 女,name= 赵六,sclass= 三班,score= 83]
耗时:380
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值