仅在选择后才应用Apache-poi十进制格式

时间:2019-05-24 12:10:55

标签: java apache-poi

您能建议下一种情况吗?

我已经设置了数据格式和单元格类型(“#,###。00”,NUMERIC) (我想要thounsand分隔符加上两个十进制数字)

它能按我的预期工作,但是要格式化单元格,我需要先选择它们 在选择数据看起来未格式化之前

换句话说,我必须选择单元格以便对其进行格式化,否则它将保持不变而无需任何格式

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 个答案:

答案 0 :(得分:1)

如果您需要数字单元格值,则不要将单元格值设置为字符串。如果将单元格值设置为String,则单元格类型也将是字符串。这与设置CellType 之前设置单元格值无关。设置String单元格值时,类型始终更改为字符串。

请参见API documentation,其中表明已弃用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);
  }
 }
}