package com.xchanging.selenium.utility;
import java.io.IOException;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Set;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ReadExcel {
public static void readExcel(String sheetName, String testCaseName)
throws IOException {
XSSFWorkbook sourceBook = new XSSFWorkbook("./TestCases.xlsx");
XSSFSheet sourceSheet = sourceBook.getSheet(sheetName);
int testCaseStartRow = 0;
while (!sourceSheet.getRow(testCaseStartRow).getCell(0)
.getRichStringCellValue().toString().equals(testCaseName)) {
testCaseStartRow++;
}
System.out.println("testCaseStartingRow: " + testCaseStartRow);
int testCaseStartColumn = 0;
int headerRow = testCaseStartRow + 1;
int keyRow = headerRow + 1;
while (sourceSheet.getRow(headerRow).getCell(testCaseStartColumn) != null) {
testCaseStartColumn++;
}
int lastColumn = testCaseStartColumn - 1;
System.out.println("Header Row: " + headerRow);
System.out.println("Key Row: " + keyRow);
int parameters = lastColumn + 1;
System.out.println("NO. of Parameters: " + parameters);
Hashtable<String, String> table = new Hashtable<String, String>();
Object[][] testData = new Object[0][lastColumn];
for (int j = 0; j <= lastColumn; j++) {
int cellType = sourceSheet.getRow(keyRow).getCell(j).getCellType();
if (cellType == 0) {
String key = sourceSheet.getRow(headerRow).getCell(j)
.toString();
String value = Double.toString(sourceSheet.getRow(keyRow)
.getCell(j).getNumericCellValue());
table.put(key, value);
} else if (cellType == 1) {
String key = sourceSheet.getRow(headerRow).getCell(j)
.toString();
String value = sourceSheet.getRow(keyRow).getCell(j).toString();
table.put(key, value);
} else if (cellType == 2) {
String key = sourceSheet.getRow(headerRow).getCell(j)
.toString();
String value = sourceSheet.getRow(keyRow).getCell(j)
.getRawValue().toString();
table.put(key, value);
} else if (cellType == 4) {
String key = sourceSheet.getRow(headerRow).getCell(j)
.toString();
String value = Boolean.toString(sourceSheet.getRow(keyRow)
.getCell(j).getBooleanCellValue());
table.put(key, value);
} else {
String key = sourceSheet.getRow(headerRow).getCell(j)
.toString();
String value = "";
table.put(key, value);
}
}
}
}
我已将Excel工作表参数和值存储到HashTable中。我可以将其更改为2D数组并且能够通过键来加入值吗?
我需要更改2D数组的原因是,TestNG仅支持2D数组对象。
答案 0 :(得分:0)
一种简单的方法是迭代值:
public static<T,Q> Object[][] toArray (Map<T,Q> map) {
if(map == null) {
return null;
}
Object[][] result = new Object[map.size()][];
int index = 0;
for(Map.Entry<T,Q> e : map.entrySet()) {
result[index++] = new Object[] {e.getKey(),e.getValue()};
}
return result;
}
此jdoodle演示了一个测试用例。
答案 1 :(得分:0)
如果我理解正确,下面的样本就是你;
Hashtable<String, String> map = new Hashtable();
map.put("A", "B");
map.put("C", "D");
Object[][] arr = new Object[map.size()][2];
Set entries = map.entrySet();
Iterator entriesIterator = entries.iterator();
int i = 0;
while (entriesIterator.hasNext()) {
Map.Entry mapping = (Map.Entry) entriesIterator.next();
arr[i][0] = mapping.getKey();
arr[i][1] = mapping.getValue();
i++;
}
答案 2 :(得分:0)
您可以使用Java 8中的流相当整齐地执行此操作:
String[][] arrays = new String[map.size()][2];
arrays = map.entrySet().stream().map(entry -> {
String[] row = {entry.getKey(), entry.getValue()};
return row;
}).collect(Collectors.toList()).toArray(arrays);