java编程之POI读取excel表格的内容

简介: 07版本的excel需要另外加一个jar包。xbean.jar的jar包 读取代码模板。利用模板介绍读取excel的一些poi的api这是重点 1 /** 2 * 读取excel文件 3 * @Title: readExcel 4 * @Descr...

07版本的excel需要另外加一个jar包。xbean.jar的jar包

读取代码模板。利用模板介绍读取excel的一些poi的api这是重点

 1 /**
 2      * 读取excel文件
 3     * @Title: readExcel 
 4     * @Description: TODO(这里用一句话描述这个方法的作用)
 5     * @author 尚晓飞
 6     * @date 2014-11-10 上午8:58:01
 7     * @param readPath  读取电脑硬盘上某个excel的绝对路径 例如:C://20141110中石油.xlsx
 8     * @see com.bjsxt.sxf.service.ReadExcelService#readExcel(java.lang.String)]
 9     * CELL_TYPE_NUMERIC 数值型 0
10       CELL_TYPE_STRING 字符串型 1
11       CELL_TYPE_FORMULA 公式型 2
12       CELL_TYPE_BLANK 空值 3
13       CELL_TYPE_BOOLEAN 布尔型 4
14       CELL_TYPE_ERROR 错误 5
15      */
16     @Override
17     public void readExcel(String readPath) {
18         try {
19             //生成文件的输入流
20             InputStream inexcel=new FileInputStream(readPath);
21             //生成输入excel文件的内存模型
22             Workbook wb=WorkbookFactory.create(inexcel);
23             //获取具体表格名的对象
24             Sheet sheet=wb.getSheet("尚晓飞");
25             //Sheet sheet2=wb.getSheetAt(0);获取指定下标的表格对象。行和列的下标都是从0开始
26             
27             
28             //定义记录一行数据的值
29             Date date=null;//时间
30             double jiage=0;//价格
31             Integer xianliang=0;//现量
32             String borS=null;//类型
33             
34             //获取excel表中存在值的行对象的迭代器
35             Iterator<Row> iterator=sheet.iterator();
36             while (iterator.hasNext()) {
37                 Row row=iterator.next();
38                 //获取excel表中存在值的某行的列对象的迭代器
39                 Iterator<Cell> cIterator=row.cellIterator();
40                 while (cIterator.hasNext()) {
41                     Cell cell=cIterator.next();
42                     if(cell.getCellType()==cell.CELL_TYPE_BLANK){
43                         //如果单元格为空值,暂停本次循环继续下次循环
44                         continue;
45                     }
46                     //获取当前单元格的列索引 。从0开始
47                     Integer columnIndex=cell.getColumnIndex();
48                     //获取当前单元格的行索引。从0开始
49                     Integer  rowIndex=cell.getRowIndex();
50                     
51                     if(cell.getCellType()==cell.CELL_TYPE_NUMERIC){//判断单元格的值是数字格式
52                         
53                         if(HSSFDateUtil.isCellDateFormatted(cell)){//判断单元格是日期格式
54                             SimpleDateFormat dateformat = new SimpleDateFormat("HH-mm");
55                             //时间
56                             date = HSSFDateUtil.getJavaDate(cell.getNumericCellValue());//获取成DATE类型   
57                             String fdate = dateformat.format(date); 
58                             System.out.println("rowIndex-->"+rowIndex+"  columnIndex-->"+columnIndex+"  value-->"+fdate);
59                            
60                         }else{
61                             
62                             if(cell.getColumnIndex()==1){
63                                 //价格
64                                 jiage=cell.getNumericCellValue();
65                                 System.out.println("rowIndex-->"+rowIndex+"  columnIndex-->"+columnIndex+"  value-->"+jiage);
66                             }else if(cell.getColumnIndex()==2){
67                                 //现量
68                                 xianliang=(int) cell.getNumericCellValue();
69                                 System.out.println("rowIndex-->"+rowIndex+"  columnIndex-->"+columnIndex+"  value-->"+xianliang);
70                             }
71                         }
72                         
73                     }
74                     
75                     if(cell.getCellType()==cell.CELL_TYPE_STRING){//单元格的值为字符串
76                             //类型
77                             borS=cell.getStringCellValue();
78                             System.out.println("rowIndex-->"+rowIndex+"  columnIndex-->"+columnIndex+"  value-->"+borS);
79                         }
80                     }    
81             }    
82         } catch (Exception e) {
83             // TODO Auto-generated catch block
84             e.printStackTrace();
85         }
86         
87     }
View Code

 

相关文章
|
15天前
|
Java 程序员
Java编程中的异常处理:从基础到高级
在Java的世界中,异常处理是代码健壮性的守护神。本文将带你从异常的基本概念出发,逐步深入到高级用法,探索如何优雅地处理程序中的错误和异常情况。通过实际案例,我们将一起学习如何编写更可靠、更易于维护的Java代码。准备好了吗?让我们一起踏上这段旅程,解锁Java异常处理的秘密!
|
18天前
|
设计模式 Java 开发者
Java多线程编程的陷阱与解决方案####
本文深入探讨了Java多线程编程中常见的问题及其解决策略。通过分析竞态条件、死锁、活锁等典型场景,并结合代码示例和实用技巧,帮助开发者有效避免这些陷阱,提升并发程序的稳定性和性能。 ####
|
18天前
|
缓存 Java 开发者
Java多线程编程的陷阱与最佳实践####
本文深入探讨了Java多线程编程中常见的陷阱,如竞态条件、死锁和内存一致性错误,并提供了实用的避免策略。通过分析典型错误案例,本文旨在帮助开发者更好地理解和掌握多线程环境下的编程技巧,从而提升并发程序的稳定性和性能。 ####
|
12天前
|
安全 算法 Java
Java多线程编程中的陷阱与最佳实践####
本文探讨了Java多线程编程中常见的陷阱,并介绍了如何通过最佳实践来避免这些问题。我们将从基础概念入手,逐步深入到具体的代码示例,帮助开发者更好地理解和应用多线程技术。无论是初学者还是有经验的开发者,都能从中获得有价值的见解和建议。 ####
|
12天前
|
Java 调度
Java中的多线程编程与并发控制
本文深入探讨了Java编程语言中多线程编程的基础知识和并发控制机制。文章首先介绍了多线程的基本概念,包括线程的定义、生命周期以及在Java中创建和管理线程的方法。接着,详细讲解了Java提供的同步机制,如synchronized关键字、wait()和notify()方法等,以及如何通过这些机制实现线程间的协调与通信。最后,本文还讨论了一些常见的并发问题,例如死锁、竞态条件等,并提供了相应的解决策略。
35 3
|
17天前
|
开发框架 安全 Java
Java 反射机制:动态编程的强大利器
Java反射机制允许程序在运行时检查类、接口、字段和方法的信息,并能操作对象。它提供了一种动态编程的方式,使得代码更加灵活,能够适应未知的或变化的需求,是开发框架和库的重要工具。
35 2
|
18天前
|
安全 Java 开发者
Java中的多线程编程:从基础到实践
本文深入探讨了Java多线程编程的核心概念和实践技巧,旨在帮助读者理解多线程的工作原理,掌握线程的创建、管理和同步机制。通过具体示例和最佳实践,本文展示了如何在Java应用中有效地利用多线程技术,提高程序性能和响应速度。
52 1
|
Java 数据处理 数据库
重构:以Java POI 导出EXCEL为例2
前言 上一篇博文已经将一些对象抽象成成员变量以及将一些代码块提炼成函数。这一节将会继续重构原有的代码,将一些函数抽象成类,增加成员变量,将传入的参数合成类等等。 上一篇博文地址:http://www.cnblogs.
1278 0
|
Java C# C++
重构:以Java POI 导出EXCEL为例
重构 开头先抛出几个问题吧,这几个问题也是《重构:改善既有代码的设计》这本书第2章的问题。 什么是重构? 为什么要重构? 什么时候要重构? 接下来就从这几个问题出发,通过这几个问题来系统的了解重构的意义。
1403 0
|
3天前
|
安全 Java API
java如何请求接口然后终止某个线程
通过本文的介绍,您应该能够理解如何在Java中请求接口并根据返回结果终止某个线程。合理使用标志位或 `interrupt`方法可以确保线程的安全终止,而处理好网络请求中的各种异常情况,可以提高程序的稳定性和可靠性。
29 6