Чтение / запись Excel с API на основе Java - vogella - PullRequest
0 голосов
/ 23 марта 2012

Я пытаюсь изменить существующий файл Excel с помощью API JAVA Excel vogella , но не могу с этим справиться.Я нашел способ воссоздать файл Excel, но это не то, что я хочу.Может ли кто-нибудь дать совет, подсказку или поделиться коротким примером.

Я делюсь тем, что пытаюсь сделать:

    /**
     * Reading external file.
     *
     * @return Record[];
     * @throws IOException;
     * @throws BiffException.
     */
    public Record[] read() throws IOException {
        File inputWorkbook = new File(inputFile);
        Workbook w;
        Record[] records = null;
        int rowsCount = 0;
        try {
            w = Workbook.getWorkbook(inputWorkbook);
            Sheet sheet = w.getSheet(0);

            int columnsCount = sheet.getColumns();
            rowsCount = sheet.getRows();
            records = new Record[rowsCount];

            for (int rowIndex = 0; rowIndex < rowsCount; rowIndex++) {
                Record record = new Record(columnsCount);
                for (int columnIndex = 0; columnIndex < columnsCount; columnIndex++) {
                    Cell cell = sheet.getCell(columnIndex, rowIndex);
                    String value = cell.getContents();
                    record.setRecordData(columnIndex, value);
                }
                records[rowIndex] = record;
            }
        } catch (BiffException e) {
            errorMessage = 1;
        }

        return records;
    }

   /**
    * Writing to existing excel file.
    *
    * @param records;
    * @throws IOException;
    * @throws WriteException;
    * @throws BiffException.
    */
    public void write(Record[] records) throws IOException, WriteException, BiffException {
        File file = new File(inputFile);
        WorkbookSettings wbSettings = new WorkbookSettings();

        wbSettings.setLocale(new Locale("en", "EN"));

        Workbook workbook = Workbook.getWorkbook(file, wbSettings);
        WritableWorkbook writableworkbook = Workbook.createWorkbook(file, workbook, wbSettings);
        WritableSheet excelSheet = writableworkbook.getSheet(0);

        createLabel(excelSheet);
        createContent(excelSheet, records);

        writableworkbook.write();
        writableworkbook.close();
    }

1 Ответ

1 голос
/ 23 марта 2012

Код, который вы предоставляете, написан специально , чтобы перезаписать то, что уже существует. Эта строка:

 for (int rowIndex = 0; rowIndex < rowsCount; rowIndex++)

всегда будет начинаться со строки 0 и поэтому будет перезаписывать все, что там есть.

Также ранее вы звоните:

rowsCount = sheet.getRows();

Что скажет вам, сколько строк уже заполнено. Если вы начнете заполнять после последней заполненной строки, вы сохраните все, что там уже есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...