簡體   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