Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Apache Poi 3.7中以特定格式在数字单元格中写入双精度值_Java_Excel_Apache Poi - Fatal编程技术网

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

Java 在Apache Poi 3.7中以特定格式在数字单元格中写入双精度值,java,excel,apache-poi,Java,Excel,Apache Poi,我需要使用特定格式在数字单元格中写入一个双精度值,我的意思是,生成的xls必须具有包含双精度值的数字单元格,例如:8,1。我正在尝试类似于: DecimalFormat dFormat=新的DecimalFormat(“##.#”); 数据格式(双值); 但是,由于format方法返回字符串,所以无论我是否将单元格创建为数字单元格,它们的行为始终与文本单元格相同。我在考虑两个选择: 强制单元格表现为数字单元格 忘记DecimalFormat并使用双类指定逗号作为十进制分隔符,我不确定这是否可

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

DecimalFormat dFormat=新的DecimalFormat(“##.#”);
数据格式(双值);
但是,由于format方法返回字符串,所以无论我是否将单元格创建为数字单元格,它们的行为始终与文本单元格相同。我在考虑两个选择:

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

有什么想法吗

是否需要将两个值放在一个单元格中?你能把它们分成两列吗?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将其视为数字

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

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

我尝试了这项工作很好

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

谢谢回答@carmalize。我可能解释得很糟糕,但我没有“两个值”,只有一个使用逗号作为小数分隔符的双精度值。谢谢@Gagravarr,这正是我想要的;)为友好的环境投票,它确实帮助我完成我的工作,使我的一天!假设我想通过使用exmp的参数来设置十进制数。在cellStyle.setDataFormat(hssfDataFormat.getFormat(“#,##0.000”);换成“#,###0.000”,是整数还是长的4或5十进制?