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));
}

1)Double.parseDouble(rowData[col])エクセルファイルにデータを入力する際に​​使ってみました。しかし、これにより空の文字列エラーが発生します。でセル形式を設定しまし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 に答える