java的poi技术读取和导入Excel实例

本篇文章主要介绍了java的poi技术读取和导入Excel实例,报表输出是Java应用开发中经常涉及的内容,有需要的可以了解一下。

报表输出是Java应用开发中经常涉及的内容,而一般的报表往往缺乏通用性,不方便用户进行个性化编辑。Java程序由于其跨平台特性,不能直接操纵Excel。因此,本文探讨一下POI视线Java程序进行Excel的读取和导入。

项目结构:
java_poi_excel

用到的Excel文件:
xls

XlsMain .java 类

  1 //该类有main方法,主要负责运行程序,同时该类中也包含了用poi读取Excel(2003版)
  2   
  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   
  9 import org.apache.poi.hssf.usermodel.HSSFCell;
 10 import org.apache.poi.hssf.usermodel.HSSFRow;
 11 import org.apache.poi.hssf.usermodel.HSSFSheet;
 12 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 13   
 14   
 15 /**
 16  * 
 17  * @author Hongten</br>
 18  * 
 19  * 
 20  */
 21 public class XlsMain {
 22   
 23   public static void main(String[] args) throws IOException {
 24     XlsMain xlsMain = new XlsMain();
 25     XlsDto xls = null;
 26     List<XlsDto> list = xlsMain.readXls();
 27       
 28     try {
 29       XlsDto2Excel.xlsDto2Excel(list);
 30     } catch (Exception e) {
 31       e.printStackTrace();
 32     }
 33     for (int i = 0; i < list.size(); i++) {
 34       xls = (XlsDto) list.get(i);
 35       System.out.println(xls.getXh() + "  " + xls.getXm() + "  "
 36           + xls.getYxsmc() + "  " + xls.getKcm() + "  "
 37           + xls.getCj());
 38     }
 39   
 40   }
 41   
 42   /**
 43    * 读取xls文件内容
 44    * 
 45    * @return List<XlsDto>对象
 46    * @throws IOException
 47    *       输入/输出(i/o)异常
 48    */
 49   private List<XlsDto> readXls() throws IOException {
 50     InputStream is = new FileInputStream("pldrxkxxmb.xls");
 51     HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
 52     XlsDto xlsDto = null;
 53     List<XlsDto> list = new ArrayList<XlsDto>();
 54     // 循环工作表Sheet
 55     for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) {
 56       HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
 57       if (hssfSheet == null) {
 58         continue;
 59       }
 60       // 循环行Row
 61       for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
 62         HSSFRow hssfRow = hssfSheet.getRow(rowNum);
 63         if (hssfRow == null) {
 64           continue;
 65         }
 66         xlsDto = new XlsDto();
 67         // 循环列Cell
 68         // 0学号 1姓名 2学院 3课程名 4 成绩
 69         // for (int cellNum = 0; cellNum <=4; cellNum++) {
 70         HSSFCell xh = hssfRow.getCell(0);
 71         if (xh == null) {
 72           continue;
 73         }
 74         xlsDto.setXh(getValue(xh));
 75         HSSFCell xm = hssfRow.getCell(1);
 76         if (xm == null) {
 77           continue;
 78         }
 79         xlsDto.setXm(getValue(xm));
 80         HSSFCell yxsmc = hssfRow.getCell(2);
 81         if (yxsmc == null) {
 82           continue;
 83         }
 84         xlsDto.setYxsmc(getValue(yxsmc));
 85         HSSFCell kcm = hssfRow.getCell(3);
 86         if (kcm == null) {
 87           continue;
 88         }
 89         xlsDto.setKcm(getValue(kcm));
 90         HSSFCell cj = hssfRow.getCell(4);
 91         if (cj == null) {
 92           continue;
 93         }
 94         xlsDto.setCj(Float.parseFloat(getValue(cj)));
 95         list.add(xlsDto);
 96       }
 97     }
 98     return list;
 99   }
100   
101   /**
102    * 得到Excel表中的值
103    * 
104    * @param hssfCell
105    *      Excel中的每一个格子
106    * @return Excel中每一个格子中的值
107    */
108   @SuppressWarnings("static-access")
109   private String getValue(HSSFCell hssfCell) {
110     if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN) {
111       // 返回布尔类型的值
112       return String.valueOf(hssfCell.getBooleanCellValue());
113     } else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC) {
114       // 返回数值类型的值
115       return String.valueOf(hssfCell.getNumericCellValue());
116     } else {
117       // 返回字符串类型的值
118       return String.valueOf(hssfCell.getStringCellValue());
119     }
120   }
121   
122 }

XlsDto2Excel.java类

 1 //该类主要负责向Excel(2003版)中插入数据
 2  
 3 import java.io.FileOutputStream;
 4 import java.io.OutputStream;
 5 import java.util.List;
 6   
 7 import org.apache.poi.hssf.usermodel.HSSFCell;
 8 import org.apache.poi.hssf.usermodel.HSSFRichTextString;
 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   
13   
14 public class XlsDto2Excel {
15   
16   /**
17    * 
18    * @param xls
19    *      XlsDto实体类的一个对象
20    * @throws Exception
21    *       在导入Excel的过程中抛出异常
22    */
23   public static void xlsDto2Excel(List<XlsDto> xls) throws Exception {
24     // 获取总列数
25     int CountColumnNum = xls.size();
26     // 创建Excel文档
27     HSSFWorkbook hwb = new HSSFWorkbook();
28     XlsDto xlsDto = null;
29     // sheet 对应一个工作页
30     HSSFSheet sheet = hwb.createSheet("pldrxkxxmb");
31     HSSFRow firstrow = sheet.createRow(0); // 下标为0的行开始
32     HSSFCell[] firstcell = new HSSFCell[CountColumnNum];
33     String[] names = new String[CountColumnNum];
34     names[0] = "学号";
35     names[1] = "姓名";
36     names[2] = "学院";
37     names[3] = "课程名";
38     names[4] = "成绩";
39     for (int j = 0; j < CountColumnNum; j++) {
40       firstcell[j] = firstrow.createCell(j);
41       firstcell[j].setCellValue(new HSSFRichTextString(names[j]));
42     }
43     for (int i = 0; i < xls.size(); i++) {
44       // 创建一行
45       HSSFRow row = sheet.createRow(i + 1);
46       // 得到要插入的每一条记录
47       xlsDto = xls.get(i);
48       for (int colu = 0; colu <= 4; colu++) {
49         // 在一行内循环
50         HSSFCell xh = row.createCell(0);
51         xh.setCellValue(xlsDto.getXh());
52         HSSFCell xm = row.createCell(1);
53         xm.setCellValue(xlsDto.getXm());
54         HSSFCell yxsmc = row.createCell(2);
55         yxsmc.setCellValue(xlsDto.getYxsmc());
56         HSSFCell kcm = row.createCell(3);
57         kcm.setCellValue(xlsDto.getKcm());
58         HSSFCell cj = row.createCell(4);
59         cj.setCellValue(xlsDto.getCj());
60 (xlsDto.getMessage());
61       }
62     }
63     // 创建文件输出流,准备输出电子表格
64     OutputStream out = new FileOutputStream("POI2Excel/pldrxkxxmb.xls");
65     hwb.write(out);
66     out.close();
67     System.out.println("数据库导出成功");
68   }
69   
70 }

XlsDto .java类

 1 //该类是一个实体类
 2  
 3 public class XlsDto {
 4   /**
 5    * 选课号
 6    */
 7   private Integer xkh;
 8   /**
 9    * 学号
10    */
11   private String xh;
12   /**
13    * 姓名
14    */
15   private String xm;
16   /**
17    * 学院
18    */
19   private String yxsmc;
20   /**
21    * 课程号
22    */
23   private Integer kch;
24   /**
25    * 课程名
26    */
27   private String kcm;
28   /**
29    * 成绩
30    */
31   private float cj;
32   public Integer getXkh() {
33     return xkh;
34   }
35   public void setXkh(Integer xkh) {
36     this.xkh = xkh;
37   }
38   public String getXh() {
39     return xh;
40   }
41   public void setXh(String xh) {
42     this.xh = xh;
43   }
44   public String getXm() {
45     return xm;
46   }
47   public void setXm(String xm) {
48     this.xm = xm;
49   }
50   public String getYxsmc() {
51     return yxsmc;
52   }
53   public void setYxsmc(String yxsmc) {
54     this.yxsmc = yxsmc;
55   }
56   public Integer getKch() {
57     return kch;
58   }
59   public void setKch(Integer kch) {
60     this.kch = kch;
61   }
62   public String getKcm() {
63     return kcm;
64   }
65   public void setKcm(String kcm) {
66     this.kcm = kcm;
67   }
68   public float getCj() {
69     return cj;
70   }
71   public void setCj(float cj) {
72     this.cj = cj;
73   }
74     
75 }

后台输出:

数据库导出成功

1.0    hongten    信息技术学院    计算机网络应用基础    80.0
2.0    王五    信息技术学院    计算机网络应用基础    81.0
3.0    李胜基    信息技术学院    计算机网络应用基础    82.0
4.0    五班古    信息技术学院    计算机网络应用基础    83.0
5.0    蔡诗芸    信息技术学院    计算机网络应用基础    84.0

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多关注我的博客。


微信扫码,欢迎关注微信公众账号,更多精彩~

        手机扫码加入QQ群,欢迎你~

猜你喜欢

转载自www.cnblogs.com/zhanlaoshi/p/10762435.html