Пользовательский формат Apache POI (#.##0,00) не работает

Мы используем apache poi 4.1.2 в нашем проекте. Я использую Excel 2013. Я пытаюсь отформатировать число с помощью Apache poi, но этот формат (#.##0,00) не работает. Мое требование: если cDecimalSepString имеет значение DOT(.), число должно быть в формате (#,##0.00). если cDecimalSepString имеет значение Comma(,), числовой формат должен быть в формате Format(#.##0,00). Формат(#,##0.00) у меня работает, но формат(#.##0,00) не работает. Мой десятичный разделитель по умолчанию в Excel (.) и разделитель тысяч - запятая (,). Когда если cDecimalSepString равен запятой (,), если я создаю Excel с форматом (#, ## 0,00) и изменяю свой десятичный разделитель Excel (,), а разделитель тысяч - запятая (.), то это работает. поэтому мой вопрос: нам всегда нужно использовать этот формат (#.##0,00) при создании файла Excel с Apache POI?

            CellStyle numStyle = null;
            if (cDecimalSepString != null && cDecimalSepString.equals("."))
            {
                numStyle = workbook.createCellStyle();
                short format = (short)BuiltinFormats.getBuiltinFormat("#,##0.00");
                numStyle.setDataFormat(format);
            }
            else
            {
                DataFormat dataFormat = workbook.createDataFormat();
                numStyle = workbook.createCellStyle();
                numStyle.setDataFormat(dataFormat.getFormat("#.##0,00"));                    
            }
        string value= "1000.43";
        double dValue = Double.parseDouble(value);
        Cell cell = workbook.createSheet().createRow(0).createCell(0);
        cell.setCellValue(dValue);
        cell.setCellStyle(numStyle);

Попробуйте установить локаль в начале формата? Попробуйте установить именно то, что вы хотите в Excel, а затем прочитать его обратно в Apache POI и посмотреть, что Excel решил действительно сохранить?

Gagravarr 20.12.2020 00:31

Я установил локаль, но все равно не работает. Похоже, что хранение числовых форматов никогда не локализуется, а всегда в формате en_US. как указано ниже. как заставить это работать.stackoverflow.com/questions/60967396/… Locale.setDefault(locale); LocaleUtil.setUserLocale(локаль);

satyakumar putcha 20.12.2020 07:14

Как только я установил немецкую локаль, число, которое мы сохранили в формате #.##000.. Даже если я попытаюсь установить «#.##0,00» в ячейке Excel, это неправильно отформатирует число.

satyakumar putcha 20.12.2020 11:27

Выясните, как установить его в Excel, а затем посмотрите, как Excel его сохраняет. Пока вы не знаете, как заставить Excel делать то, что вы хотите, прямо в Excel, нет смысла обращаться к POI.

Gagravarr 20.12.2020 15:25

@ Gagravarr, Excel позволяет установить формат Excel #.##0,00 только тогда, когда я изменяю параметры Excel, системные настройки, десятичный разделитель (,) и разделитель тысяч как DOT (.). поэтому этот формат (#.##0,00) не работает, если у нас есть десятичный разделитель (.), разделитель тысяч (,). Таким образом, Apache POI также не может установить этот числовой формат для английского языкового стандарта. Пожалуйста, дайте мне знать, что вы думаете.

satyakumar putcha 21.12.2020 10:21

Если вы не можете сделать это в самом Excel, вы никогда не сможете сделать это с Apache POI, извините! POI может настроить файл только способами, которые поддерживает Excel.

Gagravarr 21.12.2020 12:31

@ Gagravarr, поэтому моим решением будет всегда экспортировать число в формате (#, ##0.00), а сгенерированный файл Excel будет отображать число в соответствии с настройками Excel по умолчанию на пользовательском компьютере. Это будет работать. Пожалуйста, дайте мне знать, что такое десятичный разделитель по умолчанию в немецкой версии или версии Excel для ЕС.

satyakumar putcha 22.12.2020 13:11
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
7
1 193
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

решение будет всегда экспортировать число в формате (#,##0.00), а сгенерированный файл Excel будет отображать число в соответствии с настройками Excel по умолчанию на компьютере пользователя.

Другие вопросы по теме