Написание файла Excel из Java с помощью Apache Poi - PullRequest
0 голосов
/ 31 марта 2012

Я пишу приложение, которое считывает данные из базы данных Microsoft Access и записывает эти данные в лист Excel.Все отлично работает, но не запись новых данных в файл.Вот код:

private static XSSFWorkbook readFile(String filename) throws IOException {
    // return new XSSFWorkbook(new FileInputStream(filename));
    InputStream inp = new FileInputStream(filename);
    XSSFWorkbook wb = null;
    try {
        wb = (XSSFWorkbook) WorkbookFactory.create(inp);
    } catch (InvalidFormatException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return wb;
}

public void writeToFile(LinkedList<TimeRowWrapper> list) {

    try {
        // read file
        XSSFWorkbook workbook = readFile(fileName);

        // choose table from index
        XSSFSheet sheet = workbook.getSheetAt(kapaSheetIndex);

        for (Row row : sheet) {
            int rowNum = row.getRowNum();

            // iterate over list for row id
            for (TimeRowWrapper trw : list) {
                if (rowNum == trw.getRowNumber()) {

                    double hour = Math
                            .round(trw.getTotalTime() / 60.0 * 100.) / 100.;
                    Cell cell = row.getCell(timeCol);
                    cell.setCellValue(hour);
                }
            }
        }

        XSSFFormulaEvaluator.evaluateAllFormulaCells(workbook);

        FileOutputStream out = new FileOutputStream(fileName);
        workbook.write(out);
        out.close();

    } catch (IOException e) {
        e.printStackTrace();
    } catch (NullPointerException e) {
        e.printStackTrace();
    } catch (NumberFormatException e) {
        e.printStackTrace();
    }
}

Ответы [ 2 ]

0 голосов
/ 06 апреля 2012

Исходный код, который я разместил, был верным.В Excelfile было несколько столбцов с 0 - поэтому я попытался написать в столбце, который не был показан.

0 голосов
/ 05 апреля 2012

Из ваших комментариев к вашему посту я предполагаю, что вы делаете в цикле for правильно. Похоже, что вы пишете числовые значения из кода, и вы также пишете в ту же рабочую книгу, в которой читали. У меня есть теория, что, возможно, вы пишете правильно в Cell, но выполнение формулы может выполнять некоторые задачи. хитрые вещи с числами, так как Excel любит странно форматировать типы.

Попробуйте записать в новый файл вместо входного файла и посмотрите, генерирует ли он, по крайней мере, электронную таблицу.

Также попробуйте посмотреть, что происходит при комментировании строки:

XSSFFormulaEvaluator.evaluateAllFormulaCells(workbook); 
...