无法从字符串单元格访问单元格的数值
Cannot access numeric value of cell from a String cell
我正在尝试读取 excel 文件并相应地执行我的测试用例,现在我得到的错误是 java.lang.IllegalStateException:无法从数字中获取字符串值细胞
这是我的代码实现: 您可能会注意到我有 user String.valueOf();但无济于事。
public static List<Map<String, String>> getTestDetails()
{
List<Map<String, String>> list = null;
FileInputStream fileInputStream = null;
try
{
fileInputStream = new FileInputStream(FrameworkConstants.getExcelsheetspath()+"TestCasesToBeExecuted.xlsx");
XSSFWorkbook workbook = new XSSFWorkbook(fileInputStream);
XSSFSheet sheet = workbook.getSheet("RunManager");
int lastRowNum = sheet.getLastRowNum();
int lastColNum = sheet.getRow(0).getLastCellNum();
Map<String, String> map = null;
list = new ArrayList<Map<String,String>>();
for(int i=1; i<lastRowNum; i++)
{
map = new HashMap<String, String>();
for(int j=0; j<lastColNum; j++)
{
String key = sheet.getRow(0).getCell(j).getStringCellValue();
System.out.println("Value of key:: "+key);
String value = String.valueOf(sheet.getRow(i).getCell(j).getStringCellValue());
System.out.println("Value of value:: "+value);
map.put(key, value);
}
list.add(map);
}
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
if(Objects.nonNull(fileInputStream))
{
try
{
fileInputStream.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
return list;
}
这是我的方法调用代码:
public List<IMethodInstance> intercept(List<IMethodInstance> methods, ITestContext context)
{
List<Map<String, String>> list = ExcelUtils.getTestDetails();
List<IMethodInstance> result = new ArrayList<IMethodInstance>();
for(int i=0; i<methods.size(); i++)
{
for(int j=0; j<list.size(); j++)
{
if(methods.get(i).getMethod().equals(list.get(j).get("Test Name")))
{
if(list.get(j).get("Execute").equalsIgnoreCase("yes"))
{
methods.get(i).getMethod().setDescription(list.get(j).get("Test Description"));
methods.get(i).getMethod().setInvocationCount(Integer.parseInt(list.get(j).get("Count"))); methods.get(i).getMethod().setPriority(Integer.parseInt(list.get(j).get("Priority")));
result.add(methods.get(i));
}
}
}
}
return result;
}
我的导入如下
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.util.NumberToTextConverter;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
您可以在获取单元格值之前检查 Cell_Type
。
String value = null;
if (Sheet.getRow(i).getCell(0).getCellType() == Cell.CELL_TYPE_NUMERIC) {
value = NumberToTextConverter.toText(Sheet.getRow(i).getCell(0).getNumericCellValue());
} else
value = Sheet.getRow(i).getCell(0).getStringCellValue();
}
进口:
import org.apache.poi.ss.util.NumberToTextConverter;
import org.apache.poi.ss.usermodel.Cell;
Maven 依赖关系:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.9</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
删除下面的导入
import org.apache.poi.ss.usermodel.CellType;
根据文档 https://poi.apache.org/apidocs/dev/org/apache/poi/xssf/usermodel/XSSFCell.html#getCellType--
你应该可以做到:
String value = null;
if (sheet.getRow(i).getCell(j).getCellType() == CellType.NUMERIC) {
value=String.valueOf(sheet.getRow(i).getCell(j).getNumericCellValue());
} else{
value = sheet.getRow(i).getCell(j).getStringCellValue();
}
如果单元格可能有我们不知道的布尔值、字符串、数字。我通常设置类型然后获取值。
tempCell.setCellType(CellType.STRING);
tempCell.getStringCellValue();
我正在尝试读取 excel 文件并相应地执行我的测试用例,现在我得到的错误是 java.lang.IllegalStateException:无法从数字中获取字符串值细胞 这是我的代码实现: 您可能会注意到我有 user String.valueOf();但无济于事。
public static List<Map<String, String>> getTestDetails()
{
List<Map<String, String>> list = null;
FileInputStream fileInputStream = null;
try
{
fileInputStream = new FileInputStream(FrameworkConstants.getExcelsheetspath()+"TestCasesToBeExecuted.xlsx");
XSSFWorkbook workbook = new XSSFWorkbook(fileInputStream);
XSSFSheet sheet = workbook.getSheet("RunManager");
int lastRowNum = sheet.getLastRowNum();
int lastColNum = sheet.getRow(0).getLastCellNum();
Map<String, String> map = null;
list = new ArrayList<Map<String,String>>();
for(int i=1; i<lastRowNum; i++)
{
map = new HashMap<String, String>();
for(int j=0; j<lastColNum; j++)
{
String key = sheet.getRow(0).getCell(j).getStringCellValue();
System.out.println("Value of key:: "+key);
String value = String.valueOf(sheet.getRow(i).getCell(j).getStringCellValue());
System.out.println("Value of value:: "+value);
map.put(key, value);
}
list.add(map);
}
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
if(Objects.nonNull(fileInputStream))
{
try
{
fileInputStream.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
return list;
}
这是我的方法调用代码:
public List<IMethodInstance> intercept(List<IMethodInstance> methods, ITestContext context)
{
List<Map<String, String>> list = ExcelUtils.getTestDetails();
List<IMethodInstance> result = new ArrayList<IMethodInstance>();
for(int i=0; i<methods.size(); i++)
{
for(int j=0; j<list.size(); j++)
{
if(methods.get(i).getMethod().equals(list.get(j).get("Test Name")))
{
if(list.get(j).get("Execute").equalsIgnoreCase("yes"))
{
methods.get(i).getMethod().setDescription(list.get(j).get("Test Description"));
methods.get(i).getMethod().setInvocationCount(Integer.parseInt(list.get(j).get("Count"))); methods.get(i).getMethod().setPriority(Integer.parseInt(list.get(j).get("Priority")));
result.add(methods.get(i));
}
}
}
}
return result;
}
我的导入如下
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.util.NumberToTextConverter;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
您可以在获取单元格值之前检查 Cell_Type
。
String value = null;
if (Sheet.getRow(i).getCell(0).getCellType() == Cell.CELL_TYPE_NUMERIC) {
value = NumberToTextConverter.toText(Sheet.getRow(i).getCell(0).getNumericCellValue());
} else
value = Sheet.getRow(i).getCell(0).getStringCellValue();
}
进口:
import org.apache.poi.ss.util.NumberToTextConverter;
import org.apache.poi.ss.usermodel.Cell;
Maven 依赖关系:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.9</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
删除下面的导入
import org.apache.poi.ss.usermodel.CellType;
根据文档 https://poi.apache.org/apidocs/dev/org/apache/poi/xssf/usermodel/XSSFCell.html#getCellType--
你应该可以做到:
String value = null;
if (sheet.getRow(i).getCell(j).getCellType() == CellType.NUMERIC) {
value=String.valueOf(sheet.getRow(i).getCell(j).getNumericCellValue());
} else{
value = sheet.getRow(i).getCell(j).getStringCellValue();
}
如果单元格可能有我们不知道的布尔值、字符串、数字。我通常设置类型然后获取值。
tempCell.setCellType(CellType.STRING);
tempCell.getStringCellValue();