10、利用POI读取excel数据

自动化脚本和数据是分离的,这里是通过POI来实现excel的数据读取的。

以下实现的是1个excel sheet表中可以分作多个表,判断一个表是否结束是根据空格来的。


代码为:

package common;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;


import com.thoughtworks.selenium.webdriven.commands.GetValue;


public class ReadExcel {

public static List<Map<String,String>> readExcel(String filename,String sheetname,String tablename){
XSSFWorkbook xssWorkbook=null;
try{
xssWorkbook=new XSSFWorkbook(filename);
}catch(Exception e){
e.printStackTrace();
}
XSSFSheet xssfsheet=xssWorkbook.getSheet(sheetname);
List<Map<String,String>> list=new ArrayList<Map<String,String>>();
int data_start=0;
int rows = xssfsheet.getLastRowNum();
int data_end = rows;
for(int i=0;i<=rows;i++){
XSSFRow xssrow = xssfsheet.getRow(i);
if(xssrow == null){
continue;
}
XSSFCell xsscell=xssrow.getCell(0);
if(xsscell.toString().equals(tablename)){
data_start = i+1;
break;
}
}
for(int i=data_start;i<=rows;i++){
XSSFRow xssrow = xssfsheet.getRow(i);
if(xssrow == null){
data_end = i-1;
break;
}
 
}
for(int i=data_start+1;i<=data_end;i++){
XSSFRow xssrow = xssfsheet.getRow(i);
if(xssrow !=null){
Map<String,String> map = new HashMap<>();
for(int j=0;j<=xssrow.getLastCellNum();j++){
XSSFCell xsscel = xssrow.getCell(j);
XSSFRow xsrow = xssfsheet.getRow(data_start);
XSSFCell xscel = xsrow.getCell(j);
map.put(getValue(xscel), getValue(xsscel));
map.remove("");
}
list.add(map);
}
}
return list;
}

public static String getValue(XSSFCell xsscell){
if(xsscell==null){
return "";
}else if(xsscell.getCellType()==XSSFCell.CELL_TYPE_BOOLEAN){
return String.valueOf(xsscell.getBooleanCellValue());
}else if(xsscell.getCellType()==XSSFCell.CELL_TYPE_STRING){
return String.valueOf(xsscell.getStringCellValue());
}else{
return String.valueOf(xsscell.getNumericCellValue());
}
}


}



组织用例脚本的配置文件如下,决定了预置文件从哪里读取:


代码如下:

package common;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;


public class Scenes_01 {


public static void main(String[] args) {
// TODO Auto-generated method stub
String filename = Thread.currentThread().getStackTrace()[1].getClassName();
String classname = filename.replace("common.", "");//获取当前类名
String InputFile = read_inparam(classname).get(0);//获取InputFile值I

System.out.println("----->"+InputFile);
String PresetFile = read_inparam(classname).get(1);//获取PresetFile值
System.out.println("----->"+PresetFile);
}

public static List<String> read_inparam(String classname){
XSSFWorkbook xssWorkbook=null;
try{
xssWorkbook=new XSSFWorkbook("testconfig.xlsx");
}catch(Exception e){
e.printStackTrace();
}
XSSFSheet xssfsheet=xssWorkbook.getSheet("sheet2");
int rows = xssfsheet.getLastRowNum();
List<String> lis = new ArrayList<>();
lis.add("哈哈");
for(int i = 1;i<=rows;i++){
XSSFRow xssrow = xssfsheet.getRow(i);
if(xssrow == null){
break;
}
if(xssrow.getCell(0).toString().equals(classname)){
lis = new ArrayList<>();
XSSFCell cell_InputFile =xssrow.getCell(2);//InputFile
XSSFCell cell_PresetFile =xssrow.getCell(3);//PresetFile
lis.add(getValue(cell_InputFile));
lis.add(getValue(cell_PresetFile));
return lis;
}
}
return lis;
}

public static String getValue(XSSFCell xsscell){
if(xsscell==null){
return "";
}else if(xsscell.getCellType()==XSSFCell.CELL_TYPE_BOOLEAN){
return String.valueOf(xsscell.getBooleanCellValue());
}else if(xsscell.getCellType()==XSSFCell.CELL_TYPE_STRING){
return String.valueOf(xsscell.getStringCellValue());
}else{
return String.valueOf(xsscell.getNumericCellValue());
}
}
}

猜你喜欢

转载自blog.csdn.net/qq_37969201/article/details/79967210