vitya_brodov
@vitya_brodov
Java dev

Как спарсить кривой excel в java?

Здравствуете!
Мне приходит кривой excel(структура не удобная для парсинга), мне надо все поля записать в массив объектов
excel:
62621b428da31759755735.png
мой pojo:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RegisterModel {
    private String date;
    private String suip;
    private String state;
    private String transactionID;
}


service:
public List<RegisterModel> parse(MultipartFile file) throws IOException {
        Workbook workbook = new HSSFWorkbook(file.getInputStream());
        Sheet worksheet = workbook.getSheetAt(0);
        List<RegisterModel> registerModelList = new ArrayList<>();
        for (int i = 3; i < 10; i++) {

            Row row = worksheet.getRow(i);
            RegisterModel registerModel = new RegisterModel();
            String str = String.valueOf(row.getCell(1));
            if (!str.contains("null")) {
//                если дата
                if (str.contains(":")){
                    registerModel.setDate(str);
                }
//                если число
                if (NumberUtils.isDigits(str)){
                    registerModel.setTransactionID(str);
                }
                registerModelList.add(registerModel);
            }
        }
        System.out.println(registerModelList);
        return registerModelList;
    }


результат: данные не полностью записывается в объект, и повторяются.
[RegisterModel(date=2022-03-01T00:58:03, suip=null, state=null, transactionID=null), RegisterModel(date=null, suip=null, state=null, transactionID=502553852624)]


P.s помогите пожалуйста, я уже в отчаянии(
  • Вопрос задан
  • 184 просмотра
Решения вопроса 1
xez
@xez Куратор тега Java
TL Junior Roo
Нужно парсить обе колонки.
Парсим первую - понимаем, что нужно сделать со второй.
1. Если в первой что-то типа "oper_//d*" - создаем новый объект RegisterModel, старый (если есть такой) записываем в registerModelList.
2. Если что-то типа OPERDAY - парсим вторую колонку, пытаемся вытащить дату (можно сделать несколько вариантов формата даты, если нужно)
3. Если SUITE, STATE, NUM_ORDER - аналогично.

Я бы написал какой-то отдельный метод, который будет парсить данные из первой колонки и возвращать команды из энама.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
10 мая 2024, в 11:47
500 руб./за проект
10 мая 2024, в 11:36
30000 руб./за проект
10 мая 2024, в 11:27
1000 руб./за проект