JExcel - изменение нескольких ячеек перед закрытием WritableWorkbook

Я пытаюсь поместить заголовок в ячейку (0,0), а затем использовать цикл for(), чтобы добавить пути к файлам в каждую следующую строку. Однако я могу добавить только одну строку кода; после заголовка никакие другие ячейки в документе Excel не изменяются.

Вот где я создаю файл:

private void chooseSheetActionPerformed(java.awt.event.ActionEvent evt) {                                            
        sheetNum = chooseSheet.getSelectedIndex() - 1;
        try {
            WritableWorkbook workbook = Workbook.createWorkbook(newXls);
            workbook.createSheet("Sheet1", 0);
            workbook.write();
            workbook.close();

            writeXls();
        } catch (Exception ex) {
            Logger.getLogger(NewScore.class.getName()).log(Level.SEVERE, null, ex);
        }
    }  

И вот где я пытаюсь написать ему:

public void writeXls() throws Exception {
    Workbook wb = Workbook.getWorkbook(newXls);
    WritableWorkbook copy = Workbook.createWorkbook(newXls, wb);
    WritableSheet ws = copy.getSheet(sheetNum);
    WritableCell cell;

    // Body Part - Title
    Label lab = new Label(0,0,partName);
    cell = (WritableCell) lab;
    ws.addCell(cell);
    copy.write();
    // Image Info
    int i = 1;
    for (File file : imageArray(dir)) {
        Label label = new Label (0,i,"test" + i);
        cell = label;
        ws.addCell(cell);
        copy.write();
        i++;
    }
    copy.close();
}

Есть ли способ заставить мой цикл for() работать, или мне нужно сделать это по-другому?

Спасибо!

Привет! Вы проверяли, возвращает ли imageArray (dir) какие-либо данные? Также немного странно, что вы добавляете ячейки к одному объекту, но вызываете write и close для другого. Разве это не должны быть обращения к одному объекту?

Bogdan 26.07.2018 00:27

Привет Богдан! Да, в imageArray (dir) хранятся пять файлов. Что касается добавления ячеек и вызова WritableWorkbooks, я пытаюсь основать свой код на этом сообщении: stackoverflow.com/questions/3605923/…

Molly Taylor 26.07.2018 00:40
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
2
185
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хорошо. Сначала я был смущен тем, что вы пытаетесь создать новую книгу или отредактировать существующую. Но, похоже, вам здесь нужен новый.

Похоже, что в примере кода было две проблемы. Во-первых, вы получили только что созданный файл Excel и скопировали его содержимое в себя.

Workbook wb = Workbook.getWorkbook(newXls);
WritableWorkbook copy = Workbook.createWorkbook(newXls, wb);

Еще я заметил, что для сохранения всех изменений требуется вызвать write в экземпляре WritableWorkbook только один раз в конце.

Я закончил с таким кодом.

private static final String FILE_NAME = "D:/test_out.xls";
private static final String SHEET_NAME = "Test sheet name";
private static final int SHEET_INDEX = 0;
private static final String HEADER = "My header";

public static void main(String[] args) throws Exception {
    WritableWorkbook writableWorkbook = Workbook.createWorkbook(new File(FILE_NAME));
    WritableSheet writableSheet = writableWorkbook.createSheet(SHEET_NAME, SHEET_INDEX);

    int columnIndex = 0;
    int rowIndex = 0;

    writableSheet.addCell(new Label(columnIndex, rowIndex, HEADER));

    for (String value : Arrays.asList("First value", "Second value", "Another value")) {
        writableSheet.addCell(new Label (columnIndex, ++rowIndex, value));
    }

    writableWorkbook.write();
    writableWorkbook.close();
}

Он создал для меня файл Excel с одним листом. Лист содержит один столбец с 4 ячейками: Мой заголовок, Первое значение, Второе значение, Другое значение. Конечно, вы можете указать любые значения, которые вам нужны :)

Сработало отлично! Спасибо!

Molly Taylor 26.07.2018 23:45

Другие вопросы по теме