Обновление таблицы Excel с использованием JXL (JExcel) приводит к 0 КБ файла

1

У меня возникла проблема с записью в существующий файл excel с использованием библиотеки JExcel "jxl". У меня есть jTable, который содержит данные листа, когда пользователь нажимает кнопку удаления, выбранную строку следует удалить из листа, а также из таблицы. В следующем коде она удаляется из модели jTable, но не с листа! фактически вся рабочая книга превращается в 0 КБ после нажатия кнопки удаления! не могли бы вы рассказать мне, в чем проблема?

"Заметьте: я попытался изменить имя скопированной книги на другое имя и удалил эту строку (sheet.removeRow(deletedrow + 1);) и копирует оригинальную книгу просто отлично. Проблема, которая, как мне кажется, возникает в строке удаления"

     private void removebuttonActionPerformed(java.awt.event.ActionEvent evt) {                                             
    int deletedrow;
    deletedrow = logtable.getSelectedRow();
    int dialogButton = JOptionPane.YES_NO_OPTION;
    int dialogResult = JOptionPane.showConfirmDialog(this, "Are you sure you want to delete this record from "+ sheetname + " sheet?", "Confirmation Message", dialogButton);
    if (dialogResult == 0) {

        try {


            Workbook workbook = Workbook.getWorkbook(new File("path/" + wbname + ".xls"));

            WritableWorkbook copy = Workbook.createWorkbook(new File("path/" +wbname +".xls"), workbook);
            WritableSheet sheet = copy.getSheet(sheetname);
            sheet.removeRow(deletedrow + 1);

            copy.write();
            copy.close();

            JOptionPane.showMessageDialog(this, "The record has been deleted from (" + sheetname + ") successfully", "Information Message", JOptionPane.INFORMATION_MESSAGE);

            model.removeRow(deletedrow);
            logtable.setModel(model);
        }//try
        catch (IOException | BiffException | WriteException | HeadlessException e) {
            e.printStackTrace();

        }
    }//if confirmation message = yes

}                                            
Теги:
excel
row
jxl

1 ответ

0
Лучший ответ

Я столкнулся с той же проблемой, и вы правы, проблема заключается в removeRow. Он отлично работает для последних строк, но не может удалить средние строки.

Я сделал то, что я скопировал следующие строки на одну строку назад и удалил последнюю строку. Вот код:

for (int rowIdx = deletedrow; rowIdx < sheet.getRows(); rowIdx++) {
                    for (int colIdx = 0; colIdx < sheet.getColumns(); colIdx++) {
                        Cell readCell = sheet.getCell(colIdx, rowIdx+1);
                        Label label = new Label(colIdx, rowIdx, readCell.getContents());
                        CellFormat readFormat = readCell.getCellFormat();
                        if (readFormat != null) {

                            label.setCellFormat(readFormat);
                        }
                        sheet.addCell(label);
                    }

                }
sheet.removeRow(sheet.getRows());

Ещё вопросы

Сообщество Overcoder
Наверх
Меню