1.简介

  前面介绍了POI可以操作excel,也简单的提到另一个操作excle的工具,本篇介绍一个其他的可以操作excel的工具,但是这个工具有一个前提,excel文件版本只能是97-2003版本,如果是2007或者以上版本是操作不了的,所以,还是建议掌握POI操作excel文件。不管这个Jexcel只能操作2003版本的excel,我们先来看看如何读取一个2003版本excel内的数据。

2.常见读写Excel的工具类开源javaAPI

目前常见读写Excel的工具类开源javaAPI有两种方式:

一个是JXL(Java Excel API) 官网地址:http://jexcelapi.sourceforge.net/

一个是Apache的POI(Poor Obfuscation Implementation)官网地址:http://poi.apache.org/

POI支持微软的OLE2格式文件Office 2003及以下版本;同时支持微软的OOXML(Office Open XML)标准,也就是Office 2007以上版本。JXL只能实现对Excel 2003以下版本的支持。

POI使用HSSF对象操作OLE2格式Excel,文件后缀为.xls的;使用XSSF、SXSSF对象操作OOXML格式Excel,文件后缀为.xlsx的。

对于OLE2版本的Excel,一个Sheet工作表它的行最多支持到65536行,列支持到256列;

对于OOXML版本的Excel,一个Sheet工作表它的行支持到1048576行,列支持到16384列。

3.JXL(Java Excel API)

3.1下载JXL

1.打开网站http://www.java2s.com/Code/Jar/j/Downloadjxl2612jar.htm,选择下面2.6.12版本下载。如下图所示:

2.点击“jxl/jxl-2.6.12.jar.zip( 672 k)”,开始下载,如下图所示:

3.下载完后解压,文件结构如下图所示:

4.项目实战

4.1jar文件添加

1.把JXL文件添加在你Selenium当前项目的library中,具体添加方法,宏哥在这里就不赘述了,不清楚的可以看一下上一篇文章是怎么添加的。

4.2准备Excle文件

1. 准备一个2003版本的excel文件:test-data.xls:桌面新建一个test-data.xlsx,然后输入如下内容,如下图所示:

2.把这个文件放到eclipse项目中,如下图所示:

4.3代码设计

1.新建一个ReadExcel.java的文件,输入如下代码。

4.4参考代码

package lessons;

import java.io.File;
import java.io.IOException; import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException; /**
* @author 北京-宏哥
*
* @公众号:北京宏哥
*
* 《手把手教你》系列技巧篇(六十六)-java+ selenium自动化测试 - 读写excel文件 -下篇(详细教程)
*
* 2022年2月12日
*/ public class OperateExcle { public static void main(String[] args) { //File src = new File(".\\Files\\test-data1.xls"); try {
//从指定位置的文件创建工作簿对象;根据计算机上的位置更改文件的路径。
Workbook wrk1 = Workbook.getWorkbook(new File(".\\Files\\test-data1.xlsx")); //获取工作簿中第一个工作表的引用
Sheet sheet1 = wrk1.getSheet(0); //使用工作表的getCel(int col, int row)方法获取对单元的引用
Cell colArow1 = sheet1.getCell(0, 0);
Cell colBrow1 = sheet1.getCell(1, 0);
Cell colArow2 = sheet1.getCell(0, 1); //使用单元格引用的getContents()方法获取单元格的内容,返回值为一个字符串
String str_colArow1 = colArow1.getContents();
String str_colBrow1 = colBrow1.getContents();
String str_colArow2 = colArow2.getContents(); // 显示单元格内容
System.out.println("Contents of cell Col A Row 1: \"" + str_colArow1 + "\"");
System.out.println("Contents of cell Col B Row 1: \"" + str_colBrow1 + "\"");
System.out.println("Contents of cell Col A Row 2: \"" + str_colArow2 + "\""); } catch (BiffException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} } }

1)下面一行创建封装Excel文件的Workbook对象。 本例中,getWorkbook()方法接受指向位于“.\\Files\\test-data1.xls”处的Excel文件的File对象。

Workbook wrk1 = Workbook.getWorkbook(new File(".\\Files\\test-data1.xls"));

2)下面的行用于获取Excel文件中第一个工作表。 以类似方式,如果您正在处理的Excel文件有多个工作表,则可以获取任何其他工作表。

Sheet sheet1 = wrk1.getSheet(0);

3)下面的代码根据传递给getCell方法的参数为我们提供了对工作表中特定单元格的引用。 第一个参数表示列,第二个参数表示行。 确保只访问非空单元格,否则此方法将抛出ArrayIndexOutOfBoundsException。

Cell colArow1 = sheet1.getCell(0, 0);

4)下面这行调用getContents()方法提取Cell的内容。 内容以字符串形式返回。

String str_colArow1 = colArow1.getContents();

4.5运行代码

1.运行代码,右键Run AS->Java Appliance,控制台输出,如下图所示:

5.小结

1.读入Excel报jxl.read.biff.BiffException: Unable to recognize OLE stream,如下图所示:

解决办法:

说明导入的excel不是jxl认定的标准的OLE file,可是打开的看起来是Excle,然后我把这个Excel重新另存为一个Excel,发现他默认的保存类型是“单个文件网页”(通过EditPlus打开Excle可以看到是网页文件),然后把他保类型修改为Microsoft Office Excel,保存导入,就可以正确导入了。

另外一个可能的原因是:excel的版本问题,另存为的时候,我们要选择2003,如下图所示:

最新文章

  1. console的高级使用
  2. 分享在winform下实现模块化插件编程-优化版
  3. 字典树+博弈 CF 455B A Lot of Games(接龙游戏)
  4. 跟我一起数据挖掘(21)——redis
  5. HDU 4292:Food(最大流)
  6. python1day
  7. win7环境下安装运行gotour【转载整理】
  8. win10 1607 密匙
  9. Java 线程池的介绍以及工作原理
  10. SVN的分支、主干合并的使用说明
  11. JavaScript原型(链)学习笔记
  12. <Stackoverflow> 声望和节制
  13. Seek the Name, Seek the Fame - POJ 2752(next运用)
  14. Linux系统采用netstat命令查看DDOS攻击的方法
  15. hibernate---一级缓存, 二级缓存, 查询缓存
  16. wpf datagrid row height 行高自动计算使每行行高自适应文本
  17. 痞子衡嵌入式:开启NXP-MCUBootUtility工具的HAB加密功能 - CST(中英双语)
  18. Git—分支管理
  19. 题解-洛谷P1981 表达式求值(模拟+处理优先级的递归)
  20. Linux错误代码含义

热门文章

  1. java 封装 总结
  2. 论文翻译:2021_ICASSP 2021 ACOUSTIC ECHO CANCELLATION CHALLENGE: INTEGRATED ADAPTIVE ECHO CANCELLATION WITH TIME ALIGNMENT AND DEEP LEARNING-BASED RESIDUAL ECHO PLUS NOISE SUPPRESSION
  3. Web开发之HTTP协议
  4. 《剑指offer》面试题56 - II. 数组中数字出现的次数 II
  5. Java基础(十)——枚举与注解
  6. 【C++】类-派生和继承
  7. springmvc复习导图
  8. 利用JavaScript与正则表达式判断输入账号格式是否正确
  9. Java高级语法之反射
  10. Protobuf 动态加载 .pb 文件并操作 Message