有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在Apache Poi 3.7中以特定格式在数字单元格中写入双值

我需要使用特定格式在数字单元格中写入一个双精度值,我的意思是,生成的xls必须具有包含双精度值的数字单元格,例如:8,1。我正在尝试类似于:

DecimalFormat dFormat = new DecimalFormat("##.#");
dFormat.format(doubleValue);

但是,由于format方法返回字符串,所以无论我是否将单元格创建为数字单元格,它们的行为始终与文本单元格相同。我在考虑两个选择:

  • 强制单元格表现为数字单元格
  • 忘记DecimalFormat并使用双类指定逗号作为十进制分隔符,我不确定这是否可行

有什么想法吗


共 (3) 个答案

  1. # 1 楼答案

    我可能遗漏了一些内容,但我认为您只需要使用格式规则来设置单元格的样式,以显示一个小数位

    // 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);
    

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

  2. # 2 楼答案

    是否需要将两个值都放在一个单元格中?你能把它们分成两列吗?Excel有一个内置的“文本到列”函数,您应该能够引用该函数,该函数将根据分隔符(如逗号)将整个文本字符串列拆分为多个列。在VBA中,它看起来像这样:

    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
    Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
    :=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
    

    对于您提出的第一个解决方案,如果某个内容不能转换为数字,则不可能强制Excel将其视为数字

  3. # 3 楼答案

    我试过了,效果很好

    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);
    

    输出为所需格式的数值:2500.000