0

我在使用 apache POI 将数据从 csv 写入 excel 文件时遇到了 2 个问题。数据由日期和数字组成。问题是:

1) The numbers are written as strings.
2) Excel cannot read the date format (this messes the graphs up)

代码(我之前收到过帮助):

    String name = "test";
    Sheet sheet = wb.getSheet(name);
    if (sheet == null) {
        sheet = wb.createSheet(name);
    }

    int rowCount = 0;
    Scanner scanner = new Scanner(new File("/tmp/" + name + ".csv"));
    while (scanner.hasNextLine()) {
        String[] rowData = scanner.nextLine().split(",");
        for (int col = 0; col < rowData.length; col++) {
            Row row = sheet.getRow(rowCount);
            if (row == null)
                row = sheet.createRow(rowCount);
            Cell cell = row.getCell(col);
            if (cell == null) {
                cell = row.createCell(col);
            }
            cell.setCellValue(rowData[col]);
        }
        rowCount++;
    }

    wb.write(new FileOutputStream(excel));
}

Double.parseDouble(rowData[col])1)我在将数据输入到excel文件时尝试使用。但这给出了一个空字符串错误。我什至设置了单元格格式,style.setDataFormat(format.getFormat("#,##0.0000"));但它仍然不起作用

2)我尝试使用日期格式 cellStyle.setDataFormat(createHelper.createDataFormat().getFormat("m/d/yyyy hh:mm:ss"));,但 excel 图表仍然无法读取这种格式。(当我从 csv 文件手动复制和粘贴时,它可以工作)。

所以基本上,当使用 apache poi 复制数据时,依赖于复制单元格的其他数据都不会更新。例如,如果一个单元格的平均值为 100 个单元格,我手动将数据复制到这些单元格中,它会自动更新。但是当它通过java复制时,单元格不会更新。

4

1 回答 1

1

以下应该做更多的事情。

try {
    double value = Double.parseDouble(rowData[col]);
    cell.setCellValue(value);
} catch (NumberFormatException | NullPointerException e) {
    String value = rowData[col];
    cell.setCellValue(value);
}

.xls(但是,如果只是需要通过 Excel 双击读取,您可能不会使用 Apache POI 并将 CSV 文件直接复制到.)

于 2013-11-05T16:38:44.253 回答