Java怎样处理EXCEL的读取

简介:

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

 

实例:

[java]  view plain copy
  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 plain copy
  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 plain copy
  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,如需转载请自行联系原作者 

相关文章
|
3月前
|
Java BI 数据处理
如何在Java中实现Excel操作
如何在Java中实现Excel操作
|
4月前
|
Java 数据库 数据安全/隐私保护
Java操作Excel文件导入导出【内含有 jxl.jar 】
Java操作Excel文件导入导出【内含有 jxl.jar 】
69 0
|
5月前
|
前端开发 Java
基于Java爬取微博数据(二) 正文长文本+导出数据Excel
【5月更文挑战第12天】基于Java爬取微博数据,正文长文本+导出数据Excel
|
17天前
|
存储 Java
java的Excel导出,数组与业务字典匹配并去掉最后一个逗号
java的Excel导出,数组与业务字典匹配并去掉最后一个逗号
35 2
|
5月前
|
Java
java导出复杂excel
java导出复杂excel
|
2月前
|
存储 Java Apache
|
2月前
|
easyexcel Java 关系型数据库
阿里巴巴-EasyExcel 基于Java的简单、省内存的读写Excel
该文章主要介绍了在Java应用中如何使用EasyExcel技术完成对Excel文件的导入和导出操作,包括环境搭建、基本概念、快速入门、进阶操作和综合应用等内容,并提供了相关代码示例和注意事项。
 阿里巴巴-EasyExcel 基于Java的简单、省内存的读写Excel
|
3月前
|
Java 数据安全/隐私保护
Java无模版导出Excel 0基础教程
经常写数据导出到EXCEL,没有模板的情况下使用POI技术。以此作为记录,以后方便使用。 2 工具类 样式工具: 处理工具Java接口 水印工具 导出Excel工具类 3 测试代码 与实际复杂业务不同 在此我们只做模拟 Controller Service 4 导出测试 使用Postman进行接口测试,没接触过Postman的小伙伴可以看我这篇博客Postman导出excel文件保存为文件可以看到导出很成功,包括水印 sheet页名称自适应宽度。还有一些高亮……等功能可以直接搜索使用
Java无模版导出Excel 0基础教程
|
3月前
|
Java BI 数据处理
如何在Java中实现Excel操作
如何在Java中实现Excel操作
|
4月前
|
Java easyexcel
java开发excel导入导出工具类基于EasyExcel
java开发excel导入导出工具类基于EasyExcel
190 1
下一篇
无影云桌面