Apache POI没有正确地格式化单元格

时间:2017-09-28 11:05:18

标签: java excel apache apache-poi

我目前在使用Apache POI时遇到一些问题。

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

问题是,此数据格式不正确,您无法在Excel中使用它。 你可以在excel中看到它被左对齐写入单元格。 但是如果你点击excel中的单元格然后按回车键,它就会被右对齐,你可以使用它。

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

Workbook workbook = new HSSFWorkbook();
    sheet1 = workbook.createSheet("Daten");
    style = workbook.createCellStyle();
    CreationHelper creationHelper = workbook.getCreationHelper();
    style.setDataFormat(creationHelper.createDataFormat().getFormat("mm:ss,sss;@"));

以下方法用于将数据写入单元格。 “minutes”,“seconds”和“millisecods”是收集所需信息的原始程序方法。 “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方法中定义的样式,如第一个代码块所示。

如果您需要任何进一步的信息,请随时提出要求。

我希望有一个很好的解决方案,因为我当前的解决方法 - 一个点击每个单元格并按下输入的工具 - 是一种非常糟糕的方式:)

1 个答案:

答案 0 :(得分:2)

格式代码中的s是秒的代码,而不是毫秒。 Fractions of a second: h:mm:ss.00

此外,存储的格式字符串始终位于en_US中。点(.)是十进制分隔符,与您的语言环境无关。因此,您的格式代码应为.getFormat("mm:ss.000")

也不要把绳子插入牢房。使用DateUtil.convertTime从字符串中获取时间值,并将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);
...