public ResponseEntity<Object> importPcpXlsx(MultipartFile xlsx) {
try {
XSSFWorkbook xssfWorkbook = new XSSFWorkbook(xlsx.getInputStream());
XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(0);
Row row;
Cell cell;
int i = 1;
List<String> number = new ArrayList<>();
while (true) {
if (xssfSheet.getRow(i) != null) {
row = xssfSheet.getRow(i);
cell = row.getCell(0);
if (cell.getSheet()
.getRow(0)
.getCell(0)
.getRichStringCellValue()
.getString()
.equals("Number".trim())) {
number.add(cell.getStringCellValue().trim());
log.info("number: " + i + ". № " + cell.getStringCellValue());
}
} else {
i = 1;
break;
}
i++;
}
List<String> kpgz = new ArrayList<>();
while (true) {
if (xssfSheet.getRow(i) != null) {
row = xssfSheet.getRow(i);
cell = row.getCell(1);
if (cell.getSheet()
.getRow(0)
.getCell(1)
.getRichStringCellValue()
.getString()
.equals("kpgz".trim())) {
kpgz.add(cell.getStringCellValue().trim());
log.info("kpgz: " + i + ". " + cell.getStringCellValue());
}
} else {
i = 1;
break;
}
i++;
}
我遍历每一栏并阅读每一栏下的所有行。但如果我有一些列不在xlxs文件中呢。也就是说,我需要一个不必严格指定列的选项。请预测。在代码中,我按列读取,因为列有不同的类型,应该以不同的方式处理。我需要这样做,这样我就不会在列号代码中指定列的数量,就像我所做的那样cell = row.getCell(0);或row.getCell(1)或row.getCell(2)
依次读取列并绑定它们的类型,然后检查这些列下的数据
类型检查示例如下:解析超大Excel 2007文件的最佳语言
如果你可以确定列,这不是一个问题。如果没有,你应该考虑改变api。