嗨,我正在尝试使用appchpoi阅读excel表格,我已经添加了以下依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.7</version>
</dependency>
my Spring Version is
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.7</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
我写了下面的代码
@SuppressWarnings("deprecation")
@PostMapping("/dump-data-from-excel")
ResponseEntity<String> dumpDatafromExcel(@RequestParam("file") MultipartFile multipart) {
try {
XSSFWorkbook workbook = new XSSFWorkbook(multipart.getInputStream());
XSSFSheet sheet = workbook.getSheetAt(0);
System.out.println(sheet.getRow(0).getCell(1).getCellType());
} catch (Exception e) {
System.out.println(e.getMessage());
}
return null;
}
}
当我点击这个方法时,我试图从excel表格中打印数据类型,而不是返回数据类型
数字
output: 1
它看起来工作正常,除非第一个工作表的第一个单元格不是字符串。
getCellType返回一个org.apache.poi.ss.usermodel.CellType枚举。STRING的值为1。查看源代码在这里
试试enum.name(),即
System.out.println(sheet.getRow(0).getCell(1).getCellType().name());
似乎您正面临着Apache POI在从Excel表读取数据时返回的单元格值的数据类型的问题。返回的值是1,它是单元格的数值,而不是数据类型。
要解决这个问题,您可以使用Apache POI提供的DataFormatter类。DataFormatter类可用于根据数据类型格式化单元格的值。
下面是一个如何使用DataFormatter类的示例:
@SuppressWarnings("deprecation")
@PostMapping("/dump-data-from-excel")
ResponseEntity<String> dumpDatafromExcel(@RequestParam("file") MultipartFile multipart) {
try {
XSSFWorkbook workbook = new XSSFWorkbook(multipart.getInputStream());
XSSFSheet sheet = workbook.getSheetAt(0);
DataFormatter dataFormatter = new DataFormatter();
String cellValue = dataFormatter.formatCellValue(sheet.getRow(0).getCell(1));
System.out.println(cellValue);
} catch (Exception e) {
System.out.println(e.getMessage());
}
return null;
}
在上面的例子中,我们创建了一个DataFormatter的实例,并使用它来格式化单元格值。DataFormatter类的formatCellValue()方法接受Cell对象作为参数,并返回单元格的格式化值。
通过使用DataFormatter类,您应该能够检索单元格值的正确数据类型。