我是Java新手。我有一个包含两列的Excel文件,就像键值对一样。为简单起见,我们说我有3行:
我提取数据并将其存储在LinkedHashMap
中,并使用hashmap get方法获取密钥的值:foo.get("string)
。
是否可以编写一个实现,以便我可以使用点符号样式获取数据,如foo.firstname
?这是我目前的代码:
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileInputStream;
import java.util.Iterator;
import java.util.*;
public class TestData
{
public Map<String, String> getData(){
Map<String,String> testData = new LinkedHashMap<>();
try {
String sFilePath = "test_data.xlsx";
FileInputStream file = new FileInputStream(sFilePath);
XSSFWorkbook workbook = new XSSFWorkbook(file);
XSSFSheet sheet = workbook.getSheetAt(0);
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext())
{
Row row = rowIterator.next();
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext())
{
Cell cell = cellIterator.next();
cell.setCellType(CellType.STRING);
testData.put(cell.getStringCellValue(),cellIterator.next().getStringCellValue()); //updates testData hashmap with key-value take from the two colums from Excel
}
}
file.close();
} catch (Exception e) {
e.printStackTrace();
}
return testData;
}
public static void main(String args[]){
TestData td = new TestData();
System.out.println(td.getData().get("firstname")); //prints John
}
}
修改
我为每个值编写了get方法。例如:
public String getFirstname(){
return getData("firstname");
}
这是课程的使用方式:
TestData testData = new TestData();
testData.getFirstname();
备注:
我在表格中没有很多行(大约10行),所以我认为为每一行编写get方法都可以。这是将在自动化框架中使用的测试数据,例如键入电子邮件/密码字段。
我删除了hashmap。 getData
现在返回一个字符串,它是工作表中的值(第二列)。我还没有找到保留此实现的hashmap的理由。
我之所以想要这样:为了避免在从文档中获取数据时手动键入字符串作为参数,以及使代码更易于维护。 IMO testData.getFirstname();比getData好(&#34;名字&#34;);