开发者社区> 技术mix呢> 正文

Java怎样处理EXCEL的读取

简介:
+关注继续查看

须要包:poi-3.5.jar、poi-ooxml-3.5.jar

 

实例:

[java] view plaincopy
  1. public class ProcessExcel {  
  2.   
  3.     private Workbook wb = null;  
  4.     private Sheet s = null;  
  5.     private Row row = null;  
  6.   
  7.     public ProcessExcel(String filePath) {  
  8.         try {  
  9.             System.out.println(filePath);  
  10.             if (filePath.endsWith("xls")) {  
  11.                 wb =  new HSSFWorkbook(new FileInputStream(new File(filePath)));  
  12.             } else {  
  13.                 wb = new XSSFWorkbook(filePath);  
  14.             }  
  15.             System.out.println(wb);  
  16.         } catch (IOException e) {  
  17.             e.printStackTrace();  
  18.         }  
  19.     }  
  20.   
  21.     /** 
  22.      * 表格表2-27-1 院(系)教学效果——本科生学科竞赛获奖情况 (TBL_DEPART_SUBJECT_HONOR)  
  23.      * 
  24.      * @param isInsert 
  25.      */  
  26.     public ExcelModel importExcel3281() {  
  27.         ExcelModel em = new ExcelModel();  
  28.         List<TblDepartSubjectHonor> list = new ArrayList<TblDepartSubjectHonor>();  
  29.         TblDepartSubjectHonor eb = null;  
  30.         s = wb.getSheetAt(0);  
  31.         for (int i = 2; i < s.getPhysicalNumberOfRows(); i++) {  
  32.             for (int j = 0; j < 7; j++) {  
  33.                 if (s.getRow(i).getCell(j) == null) {  
  34.                     em.setState("第" + (i + 1) + "行第" + (j + 1)  
  35.                             + "列为空值,请检查好再导入.");  
  36.                     return em;  
  37.                 }  
  38.             }  
  39.         }  
  40.   
  41.         for (int i = 2; i < s.getPhysicalNumberOfRows(); i++) {  
  42.             eb = new TblDepartSubjectHonor();  
  43.             row = s.getRow(i);  
  44.             eb.setHjxm(row.getCell(0).toString());// 获取项目  
  45.             eb.setJlmc(StringUtils.trim(row.getCell(1).toString()));  
  46.             String JB = StringUtils.trim(row.getCell(2).toString());  
  47.             if (JB.equals("国家级")) {  
  48.                 eb.setJb("01");  
  49.             } else if (JB.equals("省级")) {  
  50.                 eb.setJb("02");  
  51.             } else if (JB.equals("市级")) {  
  52.                 eb.setJb("03");  
  53.             } else {  
  54.                 eb.setJb("04");  
  55.             }  
  56.             eb.setDj(StringUtils.trim(row.getCell(3).toString()));  
  57.             eb.setSydw(StringUtils.trim(row.getCell(4).toString()));  
  58.             eb.setHjzxm(StringUtils.trim(row.getCell(5).toString()));  
  59.             eb.setZdls(StringUtils.trim(row.getCell(6).toString()));  
  60.             String HDNF = StringUtils.trim(row.getCell(7).toString());  
  61.             // 数字处理问题!  
  62.             int l = HDNF.indexOf(".");  
  63.             if (l == -1) {  
  64.                 l = HDNF.length();  
  65.             }  
  66.             eb.setHdnf(HDNF.substring(0, l));  
  67.             list.add(eb);  
  68.         }  
  69.         em.setDatas(list);  
  70.         return em;  
  71.     }  
  72. }  

构造函数是静态初始化块,读取  文件路径+文件名称  依据后缀的不同创建不同的对象。

ProcessExcel的处理过程就是读取Excel的特定行,特定列,然后把数据转化为实体类对象。再将这个对象赋给List,然后 在DAO层採用批处理将数据插入到数据库中。

ExcelModel  类的结构例如以下:

[java] view plaincopy
  1. import java.util.List;  
  2.   
  3. public class ExcelModel {  
  4.     public List datas;  
  5.     public String state;  
  6.     public List getDatas() {  
  7.         return datas;  
  8.     }  
  9.     public void setDatas(List datas) {  
  10.         this.datas = datas;  
  11.     }  
  12.     public String getState() {  
  13.         return state;  
  14.     }  
  15.     public void setState(String state) {  
  16.         this.state = state;  
  17.     }  
  18. }  


 

为什么还要又一次定义一个类来做为返回的參数,而不直接使用List对象接受返回对象列表呢?

这相当于ADTs(抽象对象模型)。把与处理Excel的相关信息封装起来,比方说这个对象不仅有数据对象列表,还有状态信息,假设读取Excel时,Excel数据填入向不合法呢。这个状态信息就能够向用户 ,当然不仅仅限制与这两个数据成员,当我们还须要其它处理Excel的相关信息的时候都能够向这个Excel里面加入数据成员来进行扩展.

 

POI操作Excel经常用法总结

 

一、 POI简单介绍

Apache POI是Apache软件基金会的开放源代码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

二、 HSSF概况

HSSF 是Horrible SpreadSheet Format的缩写。通过HSSF,你能够用纯Java代码来读取、写入、改动Excel文件。

HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。

三、 POI EXCEL文档结构类

HSSFWorkbook excel文档对象

HSSFSheet excel的sheet HSSFRow excel的行

HSSFCell excel的单元格 HSSFFont excel字体

HSSFName 名称 HSSFDataFormat 日期格式

HSSFHeader sheet头

HSSFFooter sheet尾

HSSFCellStyle cell样式

HSSFDateUtil 日期

HSSFPrintSetup 打印

HSSFErrorConstants 错误信息表

四、 EXCEL经常使用操作方法

1、 得到Excel经常使用对象

  1.  
  2. POIFSFileSystem fs=newPOIFSFileSystem(new      FileInputStream("d:\test.xls"));
  1.  
  2. //得到Excel工作簿对象
  1.  
  2. HSSFWorkbook wb = new HSSFWorkbook(fs);
  1.  
  2. //得到Excel工作表对象  
  3. HSSFSheet sheet =      wb.getSheetAt(0);
  1.  
  2. //得到Excel工作表的行
  1.  
  2. HSSFRow      row = sheet.getRow(i);
  1.  
  2. //得到Excel工作表指定行的单元格
  1.  
  2. HSSFCell cell = row.getCell((short) j);
  1.  
  2. cellStyle = cell.getCellStyle();//得到单元格样式

2、建立Excel经常使用对象

  1.  
  2. HSSFWorkbook wb = new HSSFWorkbook();//创建Excel工作簿对象
  1.  
  2. HSSFSheet sheet = wb.createSheet("new      sheet");//创建Excel工作表对象
  1.  
  2. HSSFRow row = sheet.createRow((short)0); //创建Excel工作表的行
  1.  
  2. cellStyle = wb.createCellStyle();//创建单元格样式
  1.  
  2. row.createCell((short)0).setCellStyle(cellStyle); //创建Excel工作表指定行的单元格
  1.  
  2. row.createCell((short)0).setCellValue(1); //设置Excel工作表的值
  1.  
  2. 3、设置sheet名称和单元格内容  
    1.   
    2. wb.setSheetName(1,       "第一张工作表",HSSFCell.ENCODING_UTF_16);   
    3. cell.setEncoding((short)       1);  
     
    1.   
    2. cell.setCellValue("单元格内容");        

4、取得sheet的数目

  1.  
  2. wb.getNumberOfSheets()     

5、 依据index取得sheet对象

view plaincopy to clipboardprint?

  1.  
  2. HSSFSheet sheet = wb.getSheetAt(0);

6、取得有效的行数

  1.  
  2. int      rowcount = sheet.getLastRowNum();

7、取得一行的有效单元格个数

  1.  
  2. row.getLastCellNum();     

8、单元格值类型读写

  1.  
  2. cell.setCellType(HSSFCell.CELL_TYPE_STRING); //设置单元格为STRING类型
  1.  
  2. cell.getNumericCellValue();//读取为数值类型的单元格内容

9、设置列宽、行高

  1.  
  2. sheet.setColumnWidth((short)column,(short)width);
  1.  
  2. row.setHeight((short)height);

10、加入区域,合并单元格

  1.  
  2. Region region = new      Region((short)rowFrom,(short)columnFrom,(short)rowTo
  1.  
  2. ,(short)columnTo);//合并从第rowFrom行columnFrom列
  1.  
  2. sheet.addMergedRegion(region);// 到rowTo行columnTo的区域
  1.  
  2. //得到全部区域
  1.  
  2. sheet.getNumMergedRegions()     

11、保存Excel文件

  1.  
  2. FileOutputStream fileOut = new FileOutputStream(path);  
  3. wb.write(fileOut);

12、依据单元格不同属性返回字符串数值

  1.  
[html] view plaincopy
  1. 1.public String getCellStringValue(HSSFCell cell) {   
  2.   2.String cellValue = "";   
  3.   3.switch (cell.getCellType()) {   
  4.   4.case HSSFCell.CELL_TYPE_STRING://字符串类型   
  5.   5.cellValue      = cell.getStringCellValue();   
  6.   6.if(cellValue.trim().equals("")||cellValue.trim().length()<=0)        
  7.   7.cellValue=" ";   
  8.   8.break;   
  9.   9.case HSSFCell.CELL_TYPE_NUMERIC: //数值类型   
  10.   10.cellValue      = String.valueOf(cell.getNumericCellValue());   
  11.   11.break;   
  12.   12.case HSSFCell.CELL_TYPE_FORMULA: //公式   
  13.   13.cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);        
  14.   14.cellValue      = String.valueOf(cell.getNumericCellValue());   
  15.   15.break;   
  16.   16.case HSSFCell.CELL_TYPE_BLANK:   
  17.   17.cellValue=" ";   
  18.   18.break;   
  19.   19.case HSSFCell.CELL_TYPE_BOOLEAN:   
  20.   20.break;   
  21.   21.case HSSFCell.CELL_TYPE_ERROR:   
  22.   22.break;   
  23.   23.default:   
  24.   24.break;   
  25.   25.}        
  26.   26.return cellValue;   
  27.   27.}        



本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5412096.html,如需转载请自行联系原作者 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
php读取xml 数据库字段超长处理
今天换了新机器,重新安装好开发环境。 在调用数据库(sqlserver)读取xml时解析异常,原以为是xmldom调用错误,后来自己手工编写的xml可以正常解析。 在php5以后使用xmldom不需要引用额外扩展了 查看php.
787 0
【分享】通过Excel生成批量SQL语句,处理大量数据的好办法
我们经常会遇到这样的要求:用户给发过来一些数据,要我们直接给存放到数据库里面,有的是Insert,有的是Update等等,少量的数据我们可以采取最原始的办法,也就是在SQL里面用Insert into来实现,但是如果有几十条几百条甚至上千条数据的时候继续写单独的SQL语句的话那就惨了,其实有两种简单的方法; 第一,将Excel数据整理好了之后,通过SQL的导入功能直接导进数据库,但是得保证数据库字段和Excel的字段一致。
824 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
12976 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
19991 0
C#读取Excel表格中数据并返回datatable
在软件开发的过程中,经常用到从excel表格中读取数据作为数据源,以下整理了一个有效的读取excel表格的方法。   DataTable GetDataTable(string tableName,string leftTopCel,string rightbutCel) ...
1111 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
27751 0
Excel 处理跨表处理
VLOOKUP(lookup_value,table_array,col_index_num,range_lookup) Lookup_value为需要在数据表第一列中进行查找的数值。
832 0
+关注
2968
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载