使用JXL (JExcel)更新excel表导致0 KB文件



我在使用JExcel "jxl"库写入现有excel文件时遇到了问题。我有一个包含工作表数据的jTable,当用户按下删除按钮时,选中的行应该从工作表中删除&也从表模型…在下面的代码中,它从jTable模型中删除,但没有从工作表中删除!实际上,在按下删除按钮后,整个工作簿变成了0 KB !你能告诉我是什么问题吗?

"注意:我试图将复制的工作簿的名称更改为另一个名称,并删除了这一行(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
}                                            

我遇到了同样的问题,你是对的,问题在于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());

最新更新