[英]Fetch the data from Excel using Apache poi using java
我需要通過傳遞測試用例ID從Excel中獲取測試數據。 如果我將測試用例ID作為“ TC005”傳遞-我需要獲取所有列值,例如實驗室名稱,實驗室地址,城市,州,密碼,收集中心名稱,抄送地址,城市,州和密碼。
誰能給我打電話怎么做?
我已經做了,但是我只能得到一個領域。
package com.utils;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Row;
public class ReadExcel {
static int colTestcase;
static int rowTestcase;
static int rownumber ;
static int colnumber;
static InputStream input = null;
static HSSFWorkbook workbook;
static FileInputStream file ;
static HSSFSheet sheet;
static Properties prop = new Properties();
public static boolean openFile(String fileName) {
try {
file = new FileInputStream(fileName);
workbook = new HSSFWorkbook(file);
return true;
}
catch(Exception e) {
e.printStackTrace();
return false;
}
}
public static void main(String args[])
{
long startTime = System.currentTimeMillis();
System.out.println("startTime: "+startTime);
int rowvalue=readTestCase("TC03");
int columnvalue=readHeader("Service Title");
String value=getValuefromExcel(rowvalue,columnvalue);
System.out.println("Row Value: "+rowvalue);
System.out.println("Col Value: "+columnvalue);
System.out.println("Text: "+value);
long endTime = System.currentTimeMillis();
System.out.println("endTime"+endTime);
System.out.println("Took "+(endTime - startTime) + " milliseconds");
}
public static String getInputData(String Testcase,String header)
{
int rowvalue=readTestCase(Testcase);
int columnvalue=readHeader(header);
String value = getValuefromExcel(rowvalue, columnvalue);
return value;
}
public static String getValuefromExcel(int row, int col)
{
String value =null;
String field="Wrongvalue";
if(!(row==-1||col==-1))
{
try {
System.out.println("Entered");
input = new FileInputStream("src\\com\\config\\config.properties");
// load a properties file
prop.load(input);
openFile(prop.getProperty("excelTestData_FilePath"));
//Get first sheet from the workbook
sheet = workbook.getSheet(prop.getProperty("excelTestData_Sheet"));
HSSFCell cell = null;
//Update the value of cell
cell = sheet.getRow(row).getCell(col);
value = cell.toString();
file.close();
}
catch(Exception e){
e.printStackTrace();
}
System.out.println("value Done");
return value;
}
else {
System.out.println("Given data was wrong");
}
return field;
}
public static int readTestCase(String Testcase)
{
try {
FileInputStream file = new FileInputStream(new File("C:\\Thyagu\\Workspace\\PMModule\\test-input\\PM_ModuleTestData.xls"));
//Get the workbook instance for XLS file
HSSFWorkbook workbook = new HSSFWorkbook(file);
//Get first sheet from the workbook
HSSFSheet sheet = workbook.getSheet("Data");
int rowNum = sheet.getLastRowNum()+1;
int colNum = sheet.getRow(0).getLastCellNum();
for (int i=1; i<rowNum; i++){
HSSFRow row = sheet.getRow(i);
int j=0;
HSSFCell cell = row.getCell(j);
String value = cell.toString();
if(value.equalsIgnoreCase(Testcase))
{
rowTestcase=row.getRowNum();
colTestcase=cell.getCellNum();
return rowTestcase;
}
}
file.close();
}
catch(Exception e){
e.printStackTrace();
}
System.out.println("rownumber Done: " +rowTestcase);
return -1;
}
public static int readHeader(String header)
{
try {
FileInputStream file = new FileInputStream(new File("C:\\Thyagu\\Workspace\\PMModule\\test-input\\PM_ModuleTestData.xls"));
//Get the workbook instance for XLS file
HSSFWorkbook workbook = new HSSFWorkbook(file);
//Get first sheet from the workbook
HSSFSheet sheet = workbook.getSheet("Data");
int rowNum = sheet.getLastRowNum()+1;
int colNum = sheet.getRow(0).getLastCellNum();
int i=0;
HSSFRow row = sheet.getRow(i);
rownumber =row.getRowNum();
for (int j=0; j<colNum; j++){
HSSFCell cell = row.getCell(j);
String value = cell.toString();
if(value.equalsIgnoreCase(header))
{
rownumber=row.getRowNum();
colnumber=cell.getCellNum();
return colnumber;
}
}
file.close();
}
catch(Exception e){
e.printStackTrace();
}
System.out.println("colnumber Done");
return -1;
}
}
提前致謝
Thyagu:我正在提出一個解決方案...首先,您應該創建一個方法,該方法找到具有所需第一個單元格值的行(對於我而言,假設您需要的是所需的TestCaseID),並RowObject
返回一個RowObject
。
public static HSSFRow findRow(String stringToFind){
//`hswb` is HSSFWorkbook
HSSFSheet sheet = hswb.getSheetAt(0);
Iterator <Row> rowItr = sheet.iterator();
while(rowItr.hasNext()){
HSSFRow row = (HSSFRow) rowItr.next();
if(row.getCell(0).toString().equalsIgnoreCase(stringToFind)){
return row;
}
}
// If no such row found need to handle NullPointerException for that
return null;
}
一旦有了正確的RowObject
,就可以從中提取任何非空單元格值,或者可以執行任何您想做的事情,例如在這種情況下,我已經打印了相同的值。
public static void getAllColumnFromRow(HSSFRow RowObject){
Iterator<Cell> itr = RowObject.iterator();
HSSFRow headerRow = RowObject.getSheet().getRow(0);
String cellValue = "";
String information = "";
int headerCellCount = 0;
//to avoid first column
itr.next();
while(itr.hasNext()){
Cell cell = itr.next();
Cell headerValue = headerRow.getCell(headerCellCount++);
switch(cell.getCellType()) {
case HSSFCell.CELL_TYPE_BOOLEAN:
cellValue = cell.getBooleanCellValue() +"";
information = information + " " +headerValue+" - "+cellValue+ "; ";
break;
case HSSFCell.CELL_TYPE_NUMERIC:
cellValue = cell.getNumericCellValue() + "";
information = information + " " +headerValue+" - "+cellValue+ "; ";
break;
case HSSFCell.CELL_TYPE_STRING:
cellValue = cell.getStringCellValue();
information = information + " " +headerValue+" - "+cellValue+ "; ";
break;
case HSSFCell.CELL_TYPE_BLANK:
break;
}
}
System.out.println(information);
}
如果有可能在任何行的最后一個單元格值中獲取空單元格,則需要使用MissingCellPolicy
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.