Write Double value in numeric cell with specific format in Apache Poi 3.7

前端 未结 3 1789
广开言路
广开言路 2021-01-02 03:14

I need to write a Double value in a numeric cell using a specific format, i mean, the generated xls must have numeric cells containing Double values like, for example: 8,1.

相关标签:
3条回答
  • 2021-01-02 03:46

    I tried this working fine...

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

    The output is a numeric value with desired format: 2,500.000

    0 讨论(0)
  • 2021-01-02 03:56

    Do you need to put both values in one cell? Can you split them up into 2 columns? Excel has a built-in "Texts to Columns" function that you should be able to reference that will split an entire column of text strings into multiple columns based on a delimiter (like a comma). In VBA, it looks something like this:

    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
    

    As for your first proposed solution, it is not possible to force Excel to treat something as a number if it is not convertable to a number.

    0 讨论(0)
  • 2021-01-02 04:05

    I may be missing something, but I think you just want to style the cell with a format rule to display a single decimal place

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

    That will create a formatting rule, create a cell, set the cell to be the value 8.1, then style it

    0 讨论(0)
提交回复
热议问题