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

匿名 (未验证) 提交于 2019-12-03 01:47:02

问题:

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. I am trying something like:

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

But, since format method returns a String, no matter whether I create cells as numeric or not, they always behave as text cells. I was thinking about two options:

  • Forcing cells to behave as numeric cells.
  • Forgetting about DecimalFormat and use Double class specifying comma as the decimal separator, what i'm not sure it's possible.

Any idea?

回答1:

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



回答2:

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



回答3:

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.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!