我是Springboot的新手。我需要创建一个接受Excel文件的rest API。我需要使用excel文件中的数据来执行操作。我知道如何创建API与@RequestParam和@RequestBody,但不确定如何创建一个excel文件。我没有在数据库中存储文件,所以不需要模型。我在网上搜索,但看到所有的资源都在谈论通过客户端上传文件。我想对我的API中收到的文件进行操作。
根据您的评论,您说您想从工作簿中读取一些值并使用它。
Apache POI可以是一个很棒的库。
Apache POI XSSF组件可用于读取.xlsxHSSF组件可用于读取.xls(2007年之前版本的MS Office)您可以在multipart/form-data
请求中接收文件,让Spring将其反序列化为MultipartFile
对象,然后使用Apache POI读取文件的InputStream
,创建工作簿并使用它。
将Apache POI XSSF Maven依赖项添加到您的项目:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.0.0</version>
</dependency>
控制器中的示例:
@RestController
@RequestMapping(path = "/my-controller")
public class MyController {
private final Logger log = LoggerFactory.getLogger(MyController.class);
@PostMapping(consumes = { MediaType.MULTIPART_FORM_DATA_VALUE })
public ResponseEntity<Object> handlePost(@RequestParam(name = "file") MultipartFile file) {
// validate that the file has the .xlsx extension (which doesn't mean much, actually..)
String fileName = file.getOriginalFilename();
if (fileName.substring(fileName.length() - 5, fileName.length()).equals(".xlsx")) {
try (InputStream excelIs = file.getInputStream()) {
// create the Workbook using the InputStream returned by
// MultipartFile#getInputStream()
Workbook wb = WorkbookFactory.create(excelIs);
// get the first sheet of the Workbook
Sheet sheet = wb.getSheetAt(0);
Iterator<Row> rowIt = sheet.rowIterator();
// iterating rows..
while (rowIt.hasNext()) {
Row currentRow = rowIt.next();
// as an example, i'm getting the string value of
// the first cell in the current iteration
String firstCellStringValue = currentRow.getCell(0).getStringCellValue();
log.info("{} is the value of the 1st cell in the {} row", firstCellStringValue, currentRow.getRowNum() + 1); // need to do + 1 cause the index starts at zero..
}
} catch(IOException e) {
// .. nothing to do, you could rethrow a custom exception or
// add throws declaration
throw new CustomException("Failed to process");
}
} else {
throw new CustomException("The file should be a .xlsx");
}
return ResponseEntity.ok(...); // your return
}
}
处理Excel格式真的很麻烦。
但是如果你愿意,你可以尝试Apache POI库。特别是电子表格模块:http://poi.apache.org/components/spreadsheet/
下面是一个如何使用它的示例(注意:该示例不使用最新的POI版本)。虽然可能有些部分在此期间发生了变化):https://mkyong.com/java/apache-poi-reading-and-writing-excel-file-in-java/