
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 {
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并设置各列数据的类型等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)