Десятичное форматирование Apache-poi применяется только после выбора - PullRequest
0 голосов
/ 24 мая 2019

Не могли бы вы предложить на следующий случай?

Я настроил формат данных и тип ячейки ("#, ###. 00", ЦИФРОВОЙ) (Мне нужен разделитель тысяч и два десятичных числа)

Это работает, как я и ожидал, но чтобы отформатировать ячейки, мне нужно сначала выбрать их Перед выбором данные выглядят не отформатированными

Другими словами, я должен выбрать ячейку, чтобы она была отформатирована, иначе она останется без какого-либо форматирования

CellStyle style = workbook.createCellStyle();
style.setAlignment(HorizontalAlignment.RIGHT);
style.setLocked(locked);
style.setDataFormat(workbook.createDataFormat().getFormat("#,###.00"));

cell.setCellStyle(style);
cell.setCellType(CellType.NUMERIC);
cell.setCellValue(<big decimal value>.toString());

1 Ответ

1 голос
/ 26 мая 2019

Просто не устанавливайте значение ячейки как строку, если вам нужно числовое значение ячейки.Если вы установите значение ячейки String, то тип ячейки также будет строковым.Это не зависит от установки CellType до установки значения ячейки.При установке значения ячейки String тип всегда изменяется на строковый.

См. Документация API , которая показывает, что Cell.setCellType устарела и какие методы Cell.setCellValue возможны.

Вам необходимо установить значение ячейки double, если ячейка должна иметь числовое содержимое.

Пример:

import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.math.BigDecimal;
import java.util.Random;

class CreateExcelCellNumberFormat {

 public static void main(String[] args) throws Exception {

  try (Workbook workbook = new XSSFWorkbook(); 
       FileOutputStream fileout = new FileOutputStream("Excel.xlsx") ) {

   CellStyle style = workbook.createCellStyle();
   style.setDataFormat(workbook.createDataFormat().getFormat("#,###.00"));

   Sheet sheet = workbook.createSheet();

   for (int r = 0; r < 10; r++) {
    Cell cell = sheet.createRow(r).createCell(0);
    cell.setCellStyle(style);

    BigDecimal bigDecimal = new BigDecimal(new Random().nextDouble() * 10000000000000d);
    cell.setCellValue(bigDecimal.doubleValue());

   }

   sheet.setColumnWidth(0, 25 * 256);

   workbook.write(fileout);
  }
 }
}
...