Это потому, что вы добавляете только два значения столбца
excel_data.put(Integer.toString(lnNum), new Object[] {nextLine[0],nextLine[1]});
1.Не нужно иметь Object[]
- вы можете объявить, что он содержит String[]
как возвращено CSVReader.readNext
excel_data.put(Integer.toString(lnNum), nextLine);
2. Как правильно заметил @gagan singh в комментарии, использование HashMap приведет к потере порядка вставки. Вы можете напрямую создавать значения ячеек Excel, как вы читаете из CSV. Если вы все еще хотите использовать карту, используйте LinkedHashMap
, поскольку это сохраняет порядок вставки.
Кроме того, я вижу, что вы проверяете obj instanceof Double
при создании ячейки Excel. CSVParser обрабатывает все значения как строку и, следовательно, это не может быть истиной.