Excel, созданный с помощью Apache POI, имеет точку в качестве десятичного разделителя для значений выше 1000 и запятую для меньших - PullRequest
0 голосов
/ 19 сентября 2018

Я столкнулся с некоторой проблемой при создании файлов Excel с использованием org.apache.poi.ss.usermodel utils: значения выше 1000 имеют точку (.) В качестве десятичного разделителя, а значения ниже 1000 имеют запятую (,) в качестве десятичного разделителя.

Я пытался разными способами поместить значения BigDecimal в 'Cell', но каждый раз результат один и тот же, независимо от установки типа ячейки на CELL_TYPE_NUMERIC или CELL_TYPE_STRING или выполнения чего-то подобного:

CellStyle cellStyle = workbook.createCellStyle();
cellStyle.setDataFormat(workbook.getCreationHelper().createDataFormat().getFormat("###0,00"));
cell.setCellStyle(cellStyle);

Мне удалось избавиться от этой проблемы, объединив десятичный разделитель - я беру строковое значение этого BigDecimal, заменяя все точки на запятые и готово!Но при открытии Excel все поля размечаются, и появляется предупреждение о том, что значение в этой ячейке отформатировано как текст.Я могу установить его как число, а затем выполнять различные математические операции над ними.Но я хотел бы получить сгенерированный файл Excel без предупреждений для разрешения (и, следовательно, ячеек, настроенных как числа для выполнения математических операций над ними), со значениями BigDecimal с запятой в качестве десятичного разделителя.

Я создаю свой лист и ячейки следующим образом:

Workbook workbook = new SXSSFWorkbook();
Sheet sheet = workbook.createSheet("mySheet);
int rowNum = 1;
List<MyRecord> records = (...);

for (MyRecord record : records) {
    Row row = sheet.createRow(rowNum++);
    int cellNum = 0;
     for (String attribute : attributeList) {
         String cellData = cellData(record, attribute);
         if(cellData != null) {
            Cell cell = row.createCell(cellNum);
            cell.setCellValue(cellData);
        }
        cellNum++;
        }
}
...