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);或者行.getCell(1)或者行.getCell(2)
1条答案
按热度按时间sqxo8psd1#
逐个读取列并绑定它们的类型,然后检查这些列下的数据。
请参见此处的类型检查示例:解析超大Excel 2007文件的最佳语言
如果你能明确地识别列,这不是问题。如果不能,你应该考虑改变API。