繁体   English   中英

Apache POI 未正确格式化单元格

[英]Apache POI is not formating cells properly

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

我目前的项目是从 xml 文件中读取数据并将其写入 excel 文件。 excel 编写部分是用 Apache POI 完成的,但我遇到了一个问题。 当我尝试使用数据格式 ("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是秒的代码,而不是毫秒的代码。 秒的分数: 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);
...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM