Java Apache POI未正确格式化单元格

Java Apache POI未正确格式化单元格,java,excel,apache,apache-poi,Java,Excel,Apache,Apache Poi,我目前在使用ApachePOI时面临一些问题 我当前的项目是从xml文件中读取数据并将其写入excel文件。 excel的编写部分是用ApachePOI完成的,但我遇到了一个问题。 当我尝试使用数据格式(“mm:ss,sss;@”)写入某个持续时间时,这意味着我以分钟为单位写入时间:秒,毫秒 问题是,此数据的格式不正确,您无法在excel中使用它。 在excel中,可以看到它是左对齐写入单元格的。 但是,如果您在excel中单击单元格并按enter键,它将正确对齐,您可以使用它 我使用以下代码创

我目前在使用ApachePOI时面临一些问题

我当前的项目是从xml文件中读取数据并将其写入excel文件。 excel的编写部分是用ApachePOI完成的,但我遇到了一个问题。 当我尝试使用数据格式(“mm:ss,sss;@”)写入某个持续时间时,这意味着我以分钟为单位写入时间:秒,毫秒

问题是,此数据的格式不正确,您无法在excel中使用它。 在excel中,可以看到它是左对齐写入单元格的。 但是,如果您在excel中单击单元格并按enter键,它将正确对齐,您可以使用它

我使用以下代码创建工作表和工作簿

Workbook workbook = new HSSFWorkbook();
    sheet1 = workbook.createSheet("Daten");
    style = workbook.createCellStyle();
    CreationHelper creationHelper = workbook.getCreationHelper();
    style.setDataFormat(creationHelper.createDataFormat().getFormat("mm:ss,sss;@"));
以下方法用于将数据写入单元格。 “分”、“秒”和“毫秒”是原始程序中收集所需信息的方法。 “cellcount”是行中的位置,数据应写入

public static void createCellTime(Row row, int cellcount, xmlInterface interface, Main main){
        Cell cell = row.createCell(cellcount);
        try {
            String cellTimeStringTime = minutes + ":" + seconds + "," + milliseconds;
            cell.setCellValue(cellTimeStringEchtzeit);
        } catch (NullPointerException e) {
            cell.setCellValue("-----");
        }
        cell.setCellStyle(main.style);
    }
main.style Cellstyle是在main方法中定义的样式,如第一个代码块中所示

如果您需要任何进一步的信息,请随时索取


我希望有一个很好的解决方案,因为我目前的解决方案是一个工具,它可以单击每个单元格并按enter键,这是一个糟糕的方法:)

格式代码中的
s
是几秒钟的代码,而不是几毫秒的代码

此外,存储的格式字符串始终为en_US格式。点(
)是十进制分隔符,与您的区域设置无关。因此,您的格式代码应该是
.getFormat(“mm:ss.000”)

也不要在单元格中插入字符串。用于从字符串中获取时间值,并将该
double
值放入单元格

...
String cellTimeStringTime = "00:" + minutes + ":" + seconds;
double timeValue = DateUtil.convertTime(cellTimeStringTime);
double millisecValue = Double.parseDouble(""+milliseconds);
millisecValue = millisecValue / 24 / 60 / 60 / 1000;
timeValue += millisecValue;
cell.setCellValue(timeValue);
...