Java 无法从字符串单元格中获取数值
获取错误java.lang.IllegalStateException:无法从字符串单元格获取数值 员工类别:`Java 无法从字符串单元格中获取数值,java,spring-boot,apache-poi,Java,Spring Boot,Apache Poi,获取错误java.lang.IllegalStateException:无法从字符串单元格获取数值 员工类别:` @Entity @Table(name="Employee") public class Employee { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "id") private int Id; @Column(name = "firstname") private String Firs
@Entity
@Table(name="Employee")
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private int Id;
@Column(name = "firstname")
private String FirstName;
@Column(name = "lastname")
private String LastName;
@Column(name = "email")
private String Email;
@Column(name = "mobile")
private long Mobile;
@Transient
private MultipartFile file;
getters and setters.....
服务类别:
Workbook book=null;
try {
book = new HSSFWorkbook(file.getInputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Sheet sheet=book.getSheetAt(0);
Iterator<Row> rows = sheet.iterator();
while(rows.hasNext()) {
Row row = rows.next();
emp.setId(row.getCell(0).getNumericCellValue());
emp.setFirstName(row.getCell(1).getStringCellValue());
emp.setLastName(row.getCell(2).getStringCellValue());
emp.setEmail(row.getCell(3).getStringCellValue());
emp.setMobile(NumberToTextConverter.toText(row.getCell(4).getNumericCellValue()) );
}
}
工作簿=null;
试一试{
book=新的HSSFWorkbook(file.getInputStream());
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
Sheet Sheet=book.getSheetAt(0);
迭代器行=sheet.Iterator();
while(rows.hasNext()){
Row=rows.next();
emp.setId(row.getCell(0.getNumericCellValue());
emp.setFirstName(row.getCell(1.getStringCellValue());
emp.setLastName(row.getCell(2.getStringCellValue());
emp.setEmail(row.getCell(3.getStringCellValue());
emp.setMobile(NumberToTextConverter.toText(row.getCell(4.getNumericCellValue());
}
}
执行此操作时,会出现如下错误:java.lang.IllegalStateException:无法从字符串单元格中获取数值您只需跳过第一行,如下所示:
Workbook book=null;
try {
book = new HSSFWorkbook(file.getInputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Sheet sheet=book.getSheetAt(0);
Iterator<Row> rows = sheet.iterator();
// SKIP HEADER
if (rows.hasNext()) {
rows.next();
}
while(rows.hasNext()) {
Row row = rows.next();
emp.setId(row.getCell(0).getNumericCellValue());
emp.setFirstName(row.getCell(1).getStringCellValue());
emp.setLastName(row.getCell(2).getStringCellValue());
emp.setEmail(row.getCell(3).getStringCellValue());
emp.setMobile(NumberToTextConverter.toText(row.getCell(4).getNumericCellValue()) );
}
}
工作簿=null;
试一试{
book=新的HSSFWorkbook(file.getInputStream());
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
Sheet Sheet=book.getSheetAt(0);
迭代器行=sheet.Iterator();
//箕斗式掘进机
if(rows.hasNext()){
rows.next();
}
while(rows.hasNext()){
Row=rows.next();
emp.setId(row.getCell(0.getNumericCellValue());
emp.setFirstName(row.getCell(1.getStringCellValue());
emp.setLastName(row.getCell(2.getStringCellValue());
emp.setEmail(row.getCell(3.getStringCellValue());
emp.setMobile(NumberToTextConverter.toText(row.getCell(4.getNumericCellValue());
}
}
您只需跳过第一行,如下所示:
Workbook book=null;
try {
book = new HSSFWorkbook(file.getInputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Sheet sheet=book.getSheetAt(0);
Iterator<Row> rows = sheet.iterator();
// SKIP HEADER
if (rows.hasNext()) {
rows.next();
}
while(rows.hasNext()) {
Row row = rows.next();
emp.setId(row.getCell(0).getNumericCellValue());
emp.setFirstName(row.getCell(1).getStringCellValue());
emp.setLastName(row.getCell(2).getStringCellValue());
emp.setEmail(row.getCell(3).getStringCellValue());
emp.setMobile(NumberToTextConverter.toText(row.getCell(4).getNumericCellValue()) );
}
}
工作簿=null;
试一试{
book=新的HSSFWorkbook(file.getInputStream());
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
Sheet Sheet=book.getSheetAt(0);
迭代器行=sheet.Iterator();
//箕斗式掘进机
if(rows.hasNext()){
rows.next();
}
while(rows.hasNext()){
Row=rows.next();
emp.setId(row.getCell(0.getNumericCellValue());
emp.setFirstName(row.getCell(1.getStringCellValue());
emp.setLastName(row.getCell(2.getStringCellValue());
emp.setEmail(row.getCell(3.getStringCellValue());
emp.setMobile(NumberToTextConverter.toText(row.getCell(4.getNumericCellValue());
}
}
您能在出现错误的行旁边设置注释吗?您的excel工作表是否有标题?如果是这样,它将无法解析头。可能是@Razib的重复。我不知道实际是哪一行出现此错误。因此,它试图将字符串头解析为数字。为什么不跳过标题?能否在出现错误的行旁边设置注释?excel工作表是否有标题?如果是这样,它将无法解析头。可能是@Razib的重复。我不知道实际是哪一行出现此错误。因此,它试图将字符串头解析为数字。为什么不跳过标题呢?