有 Java 编程相关的问题?

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

java自定义单元格格式以US格式显示,尽管使用了带UK语言环境的DataFormatter

我在电子表格中有一个单元格,用来表示持续时间值

Excel在Windows上显示的“区域”设置为“US”的值为0:04:39

Excel在Windows上显示的值“Region”设置为“UK”时为00:04:39

所以,在美国地区它使用h:mm:ss,在英国,它使用hh:mm:ss

在我使用ApachePOI(5.0.0)的应用程序中,我希望将此值呈现为hh:mm:ss,而不管平台设置为什么语言环境/区域

因此,我创建了一个DataFormatter,如下所示:

DataFormatter formatter = new DataFormatter(new java.util.Locale("en", "UK"));

问题是,当我这样做时:

displayValue = formatter.formatCellValue(cell);

{}仍然是0:04:39/h:mm:ss

我不想在我的应用程序中指定自定义数据格式,我只想让它呈现所有单元格,就好像平台上的语言环境设置为UK一样。你不应该这么做吗

我看到了https://poi.apache.org/apidocs/dev/org/apache/poi/ss/usermodel/BuiltinFormats.html 不包含hh:mm:ss的内置格式-这里最好的方法是什么


共 (1) 个答案

  1. # 1 楼答案

    我可以覆盖Excel对每种类型(时间/持续时间/日期)使用的格式,如下所示:

    CellStyle cellStyle = cell.getCellStyle();
    String dataFormatString = cellStyle.getDataFormatString();
    if( dataFormatString.equals("h:mm") ) {
        short x = wb.createDataFormat().getFormat("hh:mm;@");
        CellStyle cf = wb.createCellStyle();
        cf.setDataFormat(x);
        cell.setCellStyle(cf);
        displayValue = formatter.formatCellValue(cell).toString();
    }
    

    但我必须确保涵盖用户可能选择的日期和时间格式。如果有人知道一种不那么手工的方法,请回答