首页 文章

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

提问于
浏览
11

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

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

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

  • 强制单元格表现为数字单元格 .

  • 忘记DecimalFormat并使用Double类指定逗号作为小数分隔符,我可以做什么 .

任何的想法?

3 回答

  • 0

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

    // 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,然后设置样式

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

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

  • 17

    你需要将两个值都放在一个单元格中吗?你能把它们分成两列吗? 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将某些内容视为数字 .

相关问题