diff --git a/src/main/java/com/example/fileparser/dto/OutputFileDto.java b/src/main/java/com/example/fileparser/dto/OutputFileDto.java index 4a8db826b29adb784dd8dd12f39168ae6834f643..feba2f51aa6f7ef142ff2d5aa26efc42ece5c68a 100644 --- a/src/main/java/com/example/fileparser/dto/OutputFileDto.java +++ b/src/main/java/com/example/fileparser/dto/OutputFileDto.java @@ -9,5 +9,5 @@ import java.util.List; @AllArgsConstructor public class OutputFileDto { private List<ExcelColumnDto> columnInfoList; - private List<ExcelRowDto> rowLost; + private List<ExcelRowDto> rows; } diff --git a/src/main/java/com/example/fileparser/service/FileParserServiceImpl.java b/src/main/java/com/example/fileparser/service/impl/FileParserServiceImpl.java similarity index 80% rename from src/main/java/com/example/fileparser/service/FileParserServiceImpl.java rename to src/main/java/com/example/fileparser/service/impl/FileParserServiceImpl.java index cdc1e623795b2e19fc71514d120d1b4787bffb5d..a52d62a49283f0bafee7c3469b479f4789839e53 100644 --- a/src/main/java/com/example/fileparser/service/FileParserServiceImpl.java +++ b/src/main/java/com/example/fileparser/service/impl/FileParserServiceImpl.java @@ -1,30 +1,31 @@ -package com.example.fileparser.service; +package com.example.fileparser.service.impl; import com.example.fileparser.dto.CellDto; import com.example.fileparser.dto.ExcelColumnDto; import com.example.fileparser.dto.ExcelRowDto; import com.example.fileparser.dto.OutputFileDto; import com.example.fileparser.exception.FileReadException; +import com.example.fileparser.service.FileParserService; import lombok.extern.slf4j.Slf4j; import org.apache.poi.EmptyFileException; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.DateUtil; -import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; @Slf4j @Service +@Qualifier("fullInfo") public class FileParserServiceImpl implements FileParserService { @Override @@ -41,7 +42,7 @@ public class FileParserServiceImpl implements FileParserService { } catch (IOException e) { throw new FileReadException("Cannot read this file"); } - return new OutputFileDto(getColumns(mySheet), getAllRows(mySheet)); + return new OutputFileDto(getColumns(mySheet), getAllRows(mySheet, mySheet.getRow(0).getPhysicalNumberOfCells())); } private List<ExcelColumnDto> getColumns(XSSFSheet mySheet) { @@ -70,20 +71,23 @@ public class FileParserServiceImpl implements FileParserService { return listOfColumns; } - private List<ExcelRowDto> getAllRows(XSSFSheet mySheet) { - log.info("start iterator"); - Iterator<Row> rowIterator = mySheet.iterator(); + private List<ExcelRowDto> getAllRows(XSSFSheet mySheet, int countColumns) { + log.info("start read excel cells"); List<ExcelRowDto> listOfRows = new ArrayList<>(); - while (rowIterator.hasNext()) { - Row row = rowIterator.next(); - Iterator<Cell> cellIterator = row.cellIterator(); + for (int i = 0; i < mySheet.getPhysicalNumberOfRows(); i++){ List<CellDto> cellDtoList = new ArrayList<>(); - while (cellIterator.hasNext()) { - cellDtoList.add(convertDataToCellDto(cellIterator.next(), mySheet)); + for (int j = 0; j < countColumns; j++){ + if (mySheet.getRow(i).getCell(j) == null){ + cellDtoList.add( + new CellDto(j, null) + ); + continue; + } + cellDtoList.add(convertDataToCellDto(mySheet.getRow(i).getCell(j), mySheet)); } - listOfRows.add(new ExcelRowDto(row.getRowNum(), cellDtoList)); + listOfRows.add(new ExcelRowDto(i, cellDtoList)); } - log.debug("stop iterator\n"); + log.debug("finish read excel cells\n"); return listOfRows; } @@ -100,9 +104,6 @@ public class FileParserServiceImpl implements FileParserService { } case STRING: return new CellDto(cell.getColumnIndex(), cell.getStringCellValue()); - case _NONE: - case BLANK: - return new CellDto(cell.getColumnIndex(), null); case FORMULA: return new CellDto(cell.getColumnIndex(), mySheet.getWorkbook() @@ -112,8 +113,11 @@ public class FileParserServiceImpl implements FileParserService { .formatAsString() ); case ERROR: + return new CellDto(cell.getColumnIndex(), cell.getErrorCellValue()); + case _NONE: + case BLANK: default: - return new CellDto(cell.getColumnIndex(), "null"); + return new CellDto(cell.getColumnIndex(), null); } } } \ No newline at end of file