在Apache Poi 3.7中使用特定格式在数字单元格中写入Double值

Dan*_*ani 11 java excel apache-poi

我需要使用特定格式在数字单元格中写入Double值,我的意思是,生成的xls必须包含包含Double值的数字单元格,例如:8,1.我正在尝试这样的事情:

DecimalFormat dFormat = new DecimalFormat("##.#");
dFormat.format(doubleValue);
Run Code Online (Sandbox Code Playgroud)

但是,由于format方法返回一个String,无论我是否将单元格创建为数字,它们总是表现为文本单元格.我在想两个选择:

  • 强制细胞表现为数字细胞.
  • 忘记DecimalFormat并使用Double类指定逗号作为小数分隔符,我不确定它是否可行.

任何的想法?

Gag*_*arr 18

我可能会遗漏一些东西,但我认为你只想用格式规则设置单元格样式以显示一个小数位

// Do this only once per file
CellStyle cellStyle = wb.createCellStyle();
cellStyle.setDataFormat(
    wb.getCreationHelper().createDataFormat().getFormat("#.#"));

// Create the cell
Cell c = row.createCell(2);
c.setCellValue(8.1);
c.setCellStyle(cellStyle);
Run Code Online (Sandbox Code Playgroud)

这将创建一个格式规则,创建一个单元格,将单元格设置为值8.1,然后设置样式


小智 8

我试过这个工作得很好......

HSSFCellStyle cellStyle = wb.createCellStyle();
HSSFDataFormat hssfDataFormat = wb.createDataFormat(); 
String cellVal = "2500";
cellStyle.setDataFormat(hssfDataFormat.getFormat("#,##0.000"));
newCell.setCellStyle(cellStyle);
newCell.setCellValue(new Double(cellVal));
newCell.setCellType(Cell.CELL_TYPE_NUMERIC);
Run Code Online (Sandbox Code Playgroud)

输出是具有所需格式的数值:2,500.000