Мы используем 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);
Я установил локаль, но все равно не работает. Похоже, что хранение числовых форматов никогда не локализуется, а всегда в формате en_US. как указано ниже. как заставить это работать.stackoverflow.com/questions/60967396/… Locale.setDefault(locale); LocaleUtil.setUserLocale(локаль);
Как только я установил немецкую локаль, число, которое мы сохранили в формате #.##000.. Даже если я попытаюсь установить «#.##0,00» в ячейке Excel, это неправильно отформатирует число.
Выясните, как установить его в Excel, а затем посмотрите, как Excel его сохраняет. Пока вы не знаете, как заставить Excel делать то, что вы хотите, прямо в Excel, нет смысла обращаться к POI.
@ Gagravarr, Excel позволяет установить формат Excel #.##0,00 только тогда, когда я изменяю параметры Excel, системные настройки, десятичный разделитель (,) и разделитель тысяч как DOT (.). поэтому этот формат (#.##0,00) не работает, если у нас есть десятичный разделитель (.), разделитель тысяч (,). Таким образом, Apache POI также не может установить этот числовой формат для английского языкового стандарта. Пожалуйста, дайте мне знать, что вы думаете.
Если вы не можете сделать это в самом Excel, вы никогда не сможете сделать это с Apache POI, извините! POI может настроить файл только способами, которые поддерживает Excel.
@ Gagravarr, поэтому моим решением будет всегда экспортировать число в формате (#, ##0.00), а сгенерированный файл Excel будет отображать число в соответствии с настройками Excel по умолчанию на пользовательском компьютере. Это будет работать. Пожалуйста, дайте мне знать, что такое десятичный разделитель по умолчанию в немецкой версии или версии Excel для ЕС.
решение будет всегда экспортировать число в формате (#,##0.00), а сгенерированный файл Excel будет отображать число в соответствии с настройками Excel по умолчанию на компьютере пользователя.
Попробуйте установить локаль в начале формата? Попробуйте установить именно то, что вы хотите в Excel, а затем прочитать его обратно в Apache POI и посмотреть, что Excel решил действительно сохранить?