selenium java怎么取出excel内容

selenium java怎么取出excel内容,第1张

import javaioFile;

import javaioIOException;

import javautilArrayList;

import javautilList;

import jxlSheet;

import jxlWorkbook;

/

获取Excel文件的内容,使用Workbook方式来读取excel

/

public class ExcelWorkBook {

//利用list集合来存放数据,其类型为String

private List<string> list=new ArrayList</string><string>();

//通过Workbook方式来读取excel

Workbook book;

String username;

/

获取excel文件第一列的值,这里取得值为username

/

public List</string><string> readUsername(String sourceString) throws IOException,Exception{

List</string><string> userList = new ArrayList</string><string>();

try {

Workbook book =WorkbookgetWorkbook(new File(sourceFile));

Sheet sheet=bookgetSheet(0);

//获取文件的行数

int rows=sheetgetRows();

//获取文件的列数

int cols=sheetgetColumns();

//获取第一行的数据,一般第一行为属性值,所以这里可以忽略

String col1=sheetgetCell(0,0)getContents()trim();

String col2=sheetgetCell(1,0)getContents()trim();

Systemoutprintln(col1+","+col2);

//把第一列的值放在userlist中

for(int z=1;z<rows ;z++){

String username=sheetgetCell(0,z)getContents();

userListadd(username);

}

} catch (Exception e) {

eprintStackTrace();

}

//把获取的值放回出去,方便调用

return userList;

}

/

获取excel文件第二列的值,这里取得值为password

/

public List<String> readPassword(String sourceString) throws IOException,Exception{

List<string> passList = new ArrayList</string><string>();

try {

Workbook book =WorkbookgetWorkbook(new File(sourceFile));

Sheet sheet=bookgetSheet(0);

int rows=sheetgetRows();

for(int z=1;z<rows ;z++){

String password=sheetgetCell(1,z)getContents();

passListadd(password);

}

} catch (Exception e) {

eprintStackTrace();

}

return passList;

}

public List<String> getList(){

return list;

}

}

有个开源的东东-jxljar,可以到下载。

一读取Excel文件内容

/读取Excel文件的内容

@param file 待读取的文件

@return

/

public static String readExcel(File file){

StringBuffer sb = new StringBuffer();

Workbook wb = null;

try {

//构造Workbook(工作薄)对象

wb=WorkbookgetWorkbook(file);

} catch (BiffException e) {

eprintStackTrace();

} catch (IOException e) {

eprintStackTrace();

}

if(wb==null)

return null;

//获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了

Sheet[] sheet = wbgetSheets();

if(sheet!=null&&sheetlength>0){

//对每个工作表进行循环

for(int i=0;i<sheetlength;i++){

//得到当前工作表的行数

int rowNum = sheet[i]getRows();

for(int j=0;j<rowNum;j++){

//得到当前行的所有单元格

Cell[] cells = sheet[i]getRow(j);

if(cells!=null&&cellslength>0){

//对每个单元格进行循环

for(int k=0;k<cellslength;k++){

//读取当前单元格的值

String cellValue = cells[k]getContents();

sbappend(cellValue+" ");

}

}

sbappend(" ");

}

sbappend(" ");

}

}

//最后关闭资源,释放内存

wbclose();

return sbtoString();

}

二写入Excel文件

这里有很多格式了,比如文本内容加粗,加上某些颜色等,可以参考jxl的api,同时还推荐一篇不错的文章:

/生成一个Excel文件

@param fileName 要生成的Excel文件名

/

public static void writeExcel(String fileName){

WritableWorkbook wwb = null;

try {

//首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象

wwb = WorkbookcreateWorkbook(new File(fileName));

} catch (IOException e) {

eprintStackTrace();

}

if(wwb!=null){

//创建一个可写入的工作表

//Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置

WritableSheet ws = wwbcreateSheet("sheet1", 0);

//下面开始添加单元格

for(int i=0;i<10;i++){

for(int j=0;j<5;j++){

//这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行

Label labelC = new Label(j, i, "这是第"+(i+1)+"行,第"+(j+1)+"列");

try {

//将生成的单元格添加到工作表中

wsaddCell(labelC);

} catch (RowsExceededException e) {

eprintStackTrace();

} catch (WriteException e) {

eprintStackTrace();

}

}

}

try {

//从内存中写入文件中

wwbwrite();

//关闭资源,释放内存

wwbclose();

} catch (IOException e) {

eprintStackTrace();

} catch (WriteException e) {

eprintStackTrace();

}

}

}

三在一个Excel文件中查找是否包含某一个关键字

/搜索某一个文件中是否包含某个关键字

@param file 待搜索的文件

@param keyWord 要搜索的关键字

@return

/

public static boolean searchKeyWord(File file,String keyWord){

boolean res = false;

Workbook wb = null;

try {

//构造Workbook(工作薄)对象

wb=WorkbookgetWorkbook(file);

} catch (BiffException e) {

return res;

} catch (IOException e) {

return res;

}

if(wb==null)

return res;

//获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了

Sheet[] sheet = wbgetSheets();

boolean breakSheet = false;

if(sheet!=null&&sheetlength>0){

//对每个工作表进行循环

for(int i=0;i<sheetlength;i++){

if(breakSheet)

break;

//得到当前工作表的行数

int rowNum = sheet[i]getRows();

boolean breakRow = false;

for(int j=0;j<rowNum;j++){

if(breakRow)

break;

//得到当前行的所有单元格

Cell[] cells = sheet[i]getRow(j);

if(cells!=null&&cellslength>0){

boolean breakCell = false;

//对每个单元格进行循环

for(int k=0;k<cellslength;k++){

if(breakCell)

break;

//读取当前单元格的值

String cellValue = cells[k]getContents();

if(cellValue==null)

continue;

if(cellValuecontains(keyWord)){

res = true;

breakCell = true;

breakRow = true;

breakSheet = true;

}

}

}

}

}

}

//最后关闭资源,释放内存

wbclose();

return res;

}

四往Excel中插入图标

插入的实现很容易,参看以下代码:

/往Excel中插入

@param dataSheet 待插入的工作表

@param col 从该列开始

@param row 从该行开始

@param width 所占的列数

@param height 所占的行数

@param imgFile 要插入的文件

/

public static void insertImg(WritableSheet dataSheet, int col, int row, int width,

int height, File imgFile){

WritableImage img = new WritableImage(col, row, width, height, imgFile);

dataSheetaddImage(img);

}

以上代码的注释已经很清楚了,大概也就不用再解释了,我们可以用如下程序验证:

try {

//创建一个工作薄

WritableWorkbook workbook = WorkbookcreateWorkbook(new File("D:/test1xls"));

//待插入的工作表

WritableSheet imgSheet = workbookcreateSheet("Images",0);

//要插入的文件

File imgFile = new File("D:/1png");

//插入到第二行第一个单元格,长宽各占六个单元格

insertImg(imgSheet,0,1,6,6,imgFile);

workbookwrite();

workbookclose();

} catch (IOException e) {

eprintStackTrace();

} catch (WriteException e) {

eprintStackTrace();

}

但是jxl只支持png格式的,jpg格式和gif格式都不支持

五插入页眉页脚

一般的页眉页脚都分为三个部分,左,中,右三部分,利用如下代码可实现插入页眉页脚

/向Excel中加入页眉页脚

@param dataSheet 待加入页眉的工作表

@param left

@param center

@param right

/

public static void setHeader(WritableSheet dataSheet,String left,String center,String right){

HeaderFooter hf = new HeaderFooter();

hfgetLeft()append(left);

hfgetCentre()append(center);

hfgetRight()append(right);

//加入页眉

dataSheetgetSettings()setHeader(hf);

//加入页脚

//dataSheetgetSettings()setFooter(hf);

}

我们可以用如下代码测试该方法:

try {

//创建一个工作薄

WritableWorkbook workbook = WorkbookcreateWorkbook(new File("D:/test1xls"));

//待插入的工作表

WritableSheet dataSheet = workbookcreateSheet("加入页眉",0);

ExcelUtilssetHeader(dataSheet, "chb", "2007-03-06", "第1页,共3页");

workbookwrite();

workbookclose();

} catch (IOException e) {

eprintStackTrace();

} catch (WriteException e) {

eprintStackTrace();

}

六偷懒工具设计之sql2Excel

今天在公司陪山东客户调试,远程登录,我在linux下什么工具都没有,用ssh登录服务器,直接用mysql查询数据库,提出记录中的所有汉字全是乱码。哎,可恶的公司,不让我用windows,要不我就可以用putty或者EMS了,我ft!

甚是不爽之下,我决定自己写个工具了,把客户数据库中的数据全部提取并保存到Excel中,这样我不就可以一目了然了嘛,嘿嘿,好吧,那我就写一个工具吧。

第一部分就是谁都会的jdbc *** 作,连接数据库,提取数据集合。

Connection con;

Statement state;

/初始化连接

@param serverIp

@param dataBase

@param userName

@param password

@throws ClassNotFoundException

@throws SQLException

/

public void init(String serverIp,String dataBase,String userName,String password) throws ClassNotFoundException, SQLException{

ClassforName("commysqljdbcDriver");

//配置数据源

String url="jdbc:mysql://"+serverIp+"/"+dataBase+"useUnicode=true&characterEncoding=GB2312";

con=DriverManagergetConnection(url,userName,password);

}

/得到查询结果集

@param sql

@return

@throws SQLException

/

public ResultSet getResultSet(String sql) throws SQLException{

state = concreateStatement();

ResultSet res = stateexecuteQuery(sql);

return res;

}

/关闭连接

@throws SQLException

/

public void close() throws SQLException{

if(con!=null)

conclose();

if(state!=null)

stateclose();

}

第二部分就是把ResultSet中的记录写入一个Excel文件

*** 作Excel,我用的是jxl,不熟的同学可以参考:利用java *** 作Excel文件

/将查询结果写入Excel文件中

@param rs

@param file

@throws SQLException

/

public void writeExcel(ResultSet rs,File file) throws SQLException{

WritableWorkbook wwb = null;

try{

//首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象

wwb = WorkbookcreateWorkbook(file);

} catch (IOException e){

eprintStackTrace();

}

if(wwb!=null){

WritableSheet ws = wwbcreateSheet("sheet1", 0);

int i=0;

while(rsnext()){

Label label1 = new Label(0, i, rsgetString("id"));

Label label2 = new Label(1, i, rsgetString("category"));

try {

wsaddCell(label1);

wsaddCell(label2);

} catch (RowsExceededException e) {

eprintStackTrace();

} catch (WriteException e) {

eprintStackTrace();

}

i++;

}

try {

//从内存中写入文件中

wwbwrite();

//关闭资源,释放内存

wwbclose();

} catch (IOException e) {

eprintStackTrace();

} catch (WriteException e){

eprintStackTrace();

}

}

}

测试程序:

Sql2Excel se = new Sql2Excel();

try {

seinit("127001","mydabase", "root", "1234");

ResultSet rs = segetResultSet("select id,category from xx ");

sewriteExcel(rs, new File("/root/sql2excelxls"));

seclose();

} catch (ClassNotFoundException e) {

eprintStackTrace();

} catch (SQLException e) {

eprintStackTrace();

}

import javaio;

import jxl;

… … … …

try

{

//构建Workbook对象, 只读Workbook对象

//直接从本地文件创建Workbook

//从输入流创建Workbook

InputStream is = new FileInputStream(sourcefile);

jxlWorkbook rwb = WorkbookgetWorkbook(is);

}

catch (Exception e)

{

eprintStackTrace();

}

一旦创建了Workbook,我们就可以通过它来访问Excel Sheet(术语:工作表)。参考下面的代码片段:

//获取第一张Sheet表

Sheet rs = rwbgetSheet(0);

我们既可能通过Sheet的名称来访问它,也可以通过下标来访问它。如果通过下标来访问的话,要注意的一点是下标从0开始,就像数组一样。

一旦得到了Sheet,我们就可以通过它来访问Excel Cell(术语:单元格)。参考下面的代码片段:

//获取第一行,第一列的值

Cell c00 = rsgetCell(0, 0);

String strc00 = c00getContents();

//获取第一行,第二列的值

Cell c10 = rsgetCell(1, 0);

String strc10 = c10getContents();

//获取第二行,第二列的值

Cell c11 = rsgetCell(1, 1);

String strc11 = c11getContents();

Systemoutprintln("Cell(0, 0)" + " value : " + strc00 + "; type : " +

c00getType());

Systemoutprintln("Cell(1, 0)" + " value : " + strc10 + "; type : " +

c10getType());

Systemoutprintln("Cell(1, 1)" + " value : " + strc11 + "; type : " +

c11getType());

如果仅仅是取得Cell的值,我们可以方便地通过getContents()方法,它可以将任何类型的Cell值都作为一个字符串返回。示例代码中Cell(0, 0)是文本型,Cell(1, 0)是数字型,Cell(1,1)是日期型,通过getContents(),三种类型的返回值都是字符型。

如果有需要知道Cell内容的确切类型,API也提供了一系列的方法。参考下面的代码片段:

String strc00 = null;

double strc10 = 000;

Date strc11 = null;

Cell c00 = rsgetCell(0, 0);

Cell c10 = rsgetCell(1, 0);

Cell c11 = rsgetCell(1, 1);

if(c00getType() == CellTypeLABEL)

{

LabelCell labelc00 = (LabelCell)c00;

strc00 = labelc00getString();

}

if(c10getType() == CellTypeNUMBER)

{

NmberCell numc10 = (NumberCell)c10;

strc10 = numc10getValue();

}

if(c11getType() == CellTypeDATE)

{

DateCell datec11 = (DateCell)c11;

strc11 = datec11getDate();

}

Systemoutprintln("Cell(0, 0)" + " value : " + strc00 + "; type : " +

c00getType());

Systemoutprintln("Cell(1, 0)" + " value : " + strc10 + "; type : " +

c10getType());

Systemoutprintln("Cell(1, 1)" + " value : " + strc11 + "; type : " +

c11getType());

在得到Cell对象后,通过getType()方法可以获得该单元格的类型,然后与API提供的基本类型相匹配,强制转换成相应的类型,最后调用相应的取值方法getXXX(),就可以得到确定类型的值。API提供了以下基本类型,与Excel的数据格式相对应,如下图所示:

每种类型的具体意义,请参见Java Excel API Document。

当你完成对Excel电子表格数据的处理后,一定要使用close()方法来关闭先前创建的对象,以释放读取数据表的过程中所占用的内存空间,在读取大量数据时显得尤为重要。参考如下代码片段:

// *** 作完成时,关闭对象,释放占用的内存空间

rwbclose();

Java Excel API提供了许多访问Excel数据表的方法,在这里我只简要地介绍几个常用的方法,其它的方法请参考附录中的Java Excel API Document。

Workbook类提供的方法

1 int getNumberOfSheets()

获得工作薄(Workbook)中工作表(Sheet)的个数,示例:

jxlWorkbook rwb = jxlWorkbookgetWorkbook(new File(sourcefile));

int sheets = rwbgetNumberOfSheets();

2 Sheet[] getSheets()

返回工作薄(Workbook)中工作表(Sheet)对象数组,示例:

jxlWorkbook rwb = jxlWorkbookgetWorkbook(new File(sourcefile));

Sheet[] sheets = rwbgetSheets();

3 String getVersion()

返回正在使用的API的版本号,好像是没什么太大的作用。

jxlWorkbook rwb = jxlWorkbookgetWorkbook(new File(sourcefile));

String apiVersion = rwbgetVersion();

Sheet接口提供的方法

1 String getName()

获取Sheet的名称,示例:

jxlWorkbook rwb = jxlWorkbookgetWorkbook(new File(sourcefile));

jxlSheet rs = rwbgetSheet(0);

String sheetName = rsgetName();

2 int getColumns()

获取Sheet表中所包含的总列数,示例:

jxlWorkbook rwb = jxlWorkbookgetWorkbook(new File(sourcefile));

jxlSheet rs = rwbgetSheet(0);

int rsColumns = rsgetColumns();

3 Cell[] getColumn(int column)

获取某一列的所有单元格,返回的是单元格对象数组,示例:

jxlWorkbook rwb = jxlWorkbookgetWorkbook(new File(sourcefile));

jxlSheet rs = rwbgetSheet(0);

Cell[] cell = rsgetColumn(0);

4 int getRows()

获取Sheet表中所包含的总行数,示例:

jxlWorkbook rwb = jxlWorkbookgetWorkbook(new File(sourcefile));

jxlSheet rs = rwbgetSheet(0);

int rsRows = rsgetRows();

5 Cell[] getRow(int row)

获取某一行的所有单元格,返回的是单元格对象数组,示例子:

jxlWorkbook rwb = jxlWorkbookgetWorkbook(new File(sourcefile));

jxlSheet rs = rwbgetSheet(0);

Cell[] cell = rsgetRow(0);

6 Cell getCell(int column, int row)

获取指定单元格的对象引用,需要注意的是它的两个参数,第一个是列数,第二个是行数,这与通常的行、列组合有些不同。

jxlWorkbook rwb = jxlWorkbookgetWorkbook(new File(sourcefile));

jxlSheet rs = rwbgetSheet(0);

Cell cell = rsgetCell(0, 0);

生成新的Excel工作薄

下面的代码主要是向大家介绍如何生成简单的Excel工作表,在这里单元格的内容是不带任何修饰的(如:字体,颜色等等),所有的内容都作为字符串写入。(完整代码见ExcelWritingjava)

与读取Excel工作表相似,首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象,这里要注意的是,只能通过API提供的工厂方法来创建Workbook,而不能使用WritableWorkbook的构造函数,因为类WritableWorkbook的构造函数为protected类型。示例代码片段如下:

import javaio;

import jxl;

import jxlwrite;

… … … …

try

{

//构建Workbook对象, 只读Workbook对象

//Method 1:创建可写入的Excel工作薄

jxlwriteWritableWorkbook wwb = WorkbookcreateWorkbook(new File(targetfile));

//Method 2:将WritableWorkbook直接写入到输出流

/

OutputStream os = new FileOutputStream(targetfile);

jxlwriteWritableWorkbook wwb = WorkbookcreateWorkbook(os);

/

}

catch (Exception e)

{

eprintStackTrace();

}

API提供了两种方式来处理可写入的输出流,一种是直接生成本地文件,如果文件名不带全路径的话,缺省的文件会定位在当前目录,如果文件名带有全路径的话,则生成的Excel文件则会定位在相应的目录;另外一种是将Excel对象直接写入到输出流,例如:用户通过浏览器来访问Web服务器,如果>

这是我用来读取EXCEL的你可以参照下;;;

POI可以到>

以上就是关于selenium java怎么取出excel内容全部的内容,包括:selenium java怎么取出excel内容、java怎么获取远程带参数的excel文件、java 读取excel并设置各列数据的类型等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9635694.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存