После поиска некоторых ресурсов, я мог бы загрузить файл Excel, который содержит 1.000.000 строк данных.Но я не знал, как получить каждый данные.Вот мой код до сих пор ...
public void create(MultipartFile file) throws Exception {
try {
InputStream fileStream = new BufferedInputStream(file.getInputStream());
OPCPackage opc = OPCPackage.open(fileStream);
XSSFReader xssf = new XSSFReader(opc);
SharedStringsTable sst = xssf.getSharedStringsTable();
XSSFReader.SheetIterator itr = (XSSFReader.SheetIterator)xssf.getSheetData();
// I just realize, if I running below for-loop,
// this only print strings and in random order, not in the same order as the excel file.
// 20 is just an example
for (int i = 0; i < 20; i++) {
System.out.println(sst.getEntryAt(i).getT().toString());
}
while (itr.hasNext()) {
InputStream is = itr.next();
if (itr.getSheetName().equals("MY_SHEET_NAME")) {
while ("data is avaiable, this is just example, I'll use something like hasNext() for the row in the sheet, but I dont know how to do it" != null) {
// Want to process and get all data in each cells, then store to DB
// What I did not know, is how to get data in each cells
}
} else {
throw new Exception("Sheet not found");
}
}
} catch (Exception e) {
throw new Exception("Error is: " + e.getMessage());
} finally {
if (is != null) {
is.close();
}
if (opc != null){
opc.close();
}
if (fileStream != null) {
fileStream.close();
}
}
}
Я пытался посмотреть здесь , чтобы обработать лист, но я не понял, как получить данные в каждой ячейке,Любая помощь действительно поможет мне ..
Обновление
, если я прочту документ Apache POI, здесь , по ссылке, часть кодаЭто обработает мой Excel здесь:
public void processOneSheet(String filename) throws Exception {
OPCPackage pkg = OPCPackage.open(filename);
XSSFReader r = new XSSFReader( pkg );
SharedStringsTable sst = r.getSharedStringsTable();
XMLReader parser = fetchSheetParser(sst);
// To look up the Sheet Name / Sheet Order / rID,
// you need to process the core Workbook stream.
// Normally it's of the form rId# or rSheet#
InputStream sheet2 = r.getSheet("rId2");
InputSource sheetSource = new InputSource(sheet2);
parser.parse(sheetSource);
sheet2.close();
}
Но, после вызова parser.parse(sheetSource)
, как я могу получить все данные из каждой строки и столбца?Поскольку я хочу выполнить проверку каждой информации в каждой ячейке, а затем сохранить ее в базе данных.
Обновление 2 Я попытался использовать этот ответ, https://stackoverflow.com/a/51818500/10454516. Я мог бы получитьданные, я пытаюсь вставить myObjectRepo.save (результат) или myObjectRepo.save (myObject), оба я поместил код в метод void endRow, и я также пытаюсь поместить его сразу после переключателя, но внутри if (lineNumber> 0), но всегда возвращает NullPointerException.Но если я не вызвал метод сохранения, я пытаюсь распечатать результат в консоли, результат будет напечатан.