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,如需转载请自行联系原作者 

相关文章
|
1月前
|
前端开发 Java
基于Java爬取微博数据(二) 正文长文本+导出数据Excel
【5月更文挑战第12天】基于Java爬取微博数据,正文长文本+导出数据Excel
|
1月前
|
Java
java导出复杂excel
java导出复杂excel
|
13天前
|
XML Java 测试技术
《手把手教你》系列技巧篇(六十七)-java+ selenium自动化测试 - 读写excel文件 - 中篇(详细教程)
【6月更文挑战第8天】本文介绍了Java中操作Excel的工具,包括POI和JXL。POI支持处理Office 2003及以下的OLE2格式(.xls)和2007以上的OOXML格式(.xlsx)。而JXL只能处理2003版本的Excel文件。文章详细讲解了如何下载和使用JXL库,并给出了一个简单的Java代码示例,展示如何读取2003版Excel文件中的数据。在实际项目中,由于JXL对新版本Excel的支持限制,通常推荐使用POI。
29 5
|
13天前
|
Java 测试技术 Apache
《手把手教你》系列技巧篇(六十八)-java+ selenium自动化测试 - 读写excel文件 - 下篇(详细教程)
【6月更文挑战第9天】本文介绍了如何使用Java处理Excel文件中的不同数据类型,包括日期、数字、布尔值和标签(常规字符串)。文章提供了两个示例,分别使用JXL库和Apache POI库来读取Excel文件。
14 1
|
15天前
|
Java 测试技术 Apache
《手把手教你》系列技巧篇(六十六)-java+ selenium自动化测试 - 读写excel文件 - 上篇(详细教程)
【6月更文挑战第7天】本文介绍了在Java自动化测试中如何操作Excel数据。文章提到了当测试数据存储在Excel文件时,可以使用Apache的POI库来读写Excel。POI提供了对OLE2(.xls)和OOXML(.xlsx)格式的支持,比JXL库功能更全面。文章还详细讲解了如何下载和添加POI库到项目中,以及准备测试用的Excel文件。最后,给出了一个简单的Java代码示例,演示如何读取Excel文件的内容。
15 1
|
23天前
|
Java Apache
Java将word、excel文件转成pdf文件
【5月更文挑战第26天】Java将word、excel文件转成pdf文件
112 1
|
1天前
|
Java 数据库 数据安全/隐私保护
Java操作Excel文件导入导出【内含有 jxl.jar 】
Java操作Excel文件导入导出【内含有 jxl.jar 】
18 0
|
8天前
|
Java Maven
Java 怎样从 excel 中读取文件、写入文件
Java 怎样从 excel 中读取文件、写入文件
14 0
|
1月前
|
Java
java的excel列行合并模版
java的excel列行合并模版
|
1月前
|
Java Apache
java读取excel数据案例
Java代码示例使用Apache POI库读取Excel(example.xlsx)数据。创建FileInputStream和XSSFWorkbook对象,获取Sheet,遍历行和列,根据单元格类型(STRING, NUMERIC, BOOLEAN)打印值。需引入Apache POI库并确保替换文件路径。
18 1