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

相关文章
|
4月前
|
Java API Apache
Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
【10月更文挑战第29天】Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
261 5
|
3月前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
393 9
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
8月前
|
Java BI 数据处理
如何在Java中实现Excel操作
如何在Java中实现Excel操作
|
4月前
|
Java BI API
Java Excel报表生成:JXLS库的高效应用
在Java应用开发中,经常需要将数据导出到Excel文件中,以便于数据的分析和共享。JXLS库是一个强大的工具,它基于Apache POI,提供了一种简单而高效的方式来生成Excel报表。本文将详细介绍JXLS库的使用方法和技巧,帮助你快速掌握Java中的Excel导出功能。
136 6
|
10月前
|
前端开发 Java
基于Java爬取微博数据(二) 正文长文本+导出数据Excel
【5月更文挑战第12天】基于Java爬取微博数据,正文长文本+导出数据Excel
|
4月前
|
Java API Apache
|
4月前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
250 4
|
9月前
|
Java 数据库 数据安全/隐私保护
Java操作Excel文件导入导出【内含有 jxl.jar 】
Java操作Excel文件导入导出【内含有 jxl.jar 】
108 0
|
6月前
|
存储 Java
java的Excel导出,数组与业务字典匹配并去掉最后一个逗号
java的Excel导出,数组与业务字典匹配并去掉最后一个逗号
89 2
|
5月前
|
Java Apache
Apache POI java对excel表格进行操作(读、写) 有代码!!!
文章提供了使用Apache POI库在Java中创建和读取Excel文件的详细代码示例,包括写入数据到Excel和从Excel读取数据的方法。
391 0