Умеете ли получать данные из Excel файлов
Что проверяют
Держали ли вы в руках реальный файл от заказчика, а не аккуратный пример из документации. Вопрос звучит как формальность, но за ним обычно стоит боль: импорт прайсов или отчётов, который падает на чужих форматах ячеек и на объёме.
Как отвечать
Скажите, чем читаете и почему. Основной инструмент в Java это Apache POI: HSSF понимает старый двоичный xls, XSSF работает с xlsx. Открывать удобно через WorkbookFactory.create, он сам выберет реализацию по содержимому файла.
Детали, по которым видно опыт:
- тип ячейки надо проверять, а не предполагать: строка, число, логическое значение, формула, пустая;
- даты хранятся числом, отличить их можно только по формату ячейки, для этого есть
DateUtil.isCellDateFormatted; - числа хранятся как
double, поэтому суммы денег безопаснее собирать вBigDecimal, а не изgetNumericCellValue; - для формул выбирают одно из двух: взять закэшированное значение или посчитать через
FormulaEvaluator.
Отдельно про объём. Обычное чтение держит книгу в памяти целиком, и на больших выгрузках это приводит к нехватке памяти. Для записи есть потоковая реализация SXSSF, которая сбрасывает строки на диск. Для чтения нужен другой приём: событийный разбор XML внутри архива или библиотека, устроенная потоково изначально.
Закончите практикой: импорт полезно делать в два прохода, сначала валидация с накоплением ошибок по номерам строк, потом запись, и возвращать пользователю понятный отчёт, а не одно сообщение о сбое.
Где спотыкаются
Называют SXSSF решением для чтения. Это потоковая запись, на чтении она не помогает, и понимание этой разницы отличает того, кто правда упирался в память, от того, кто пересказывает статью.
Второе: читают всё как double и удивляются копейкам в итоговой сумме. Для денег нужен BigDecimal, а идентификаторы вроде артикулов лучше получать строкой, иначе длинный номер приедет в экспоненциальной форме.
Третье: отчитываются об импорте результатами вроде повышения точности ввода на десятки процентов. Проверить такую цифру нельзя, и она тянет уточняющий вопрос, на который нечего ответить. Лучше сказать про объём файлов и про то, какие кривые данные пришлось обрабатывать.