2013-09-04 3 views
0

Мне нужно добавить содержимое в существующий файл excel с помощью JExcel.Исключение нулевого указателя с jexcel во время записи

Я пытаюсь следующий подход:

  1. Чтение из книги

    workbook = Workbook.getWorkbook(new File(errorFilePath)); 
    
  2. Создание записываемый книги из exisitng книги в временный файл

    if (!tempFile.exists()) { 
        tempFile.getParentFile().mkdirs(); 
        tempFile.createNewFile(); 
    } 
    newCopy = Workbook.createWorkbook(tempFile, workbook); 
    excelSheet = newCopy.getSheet(0); 
    
  3. Пишите записываемая рабочая тетрадь (время - переменная формата записи)

    Label label; 
    label = new Label(column, row, stringData, times); 
    excelSheet .addCell(label); 
    
  4. Закрыть как exisitng и запись workbook-> Удалить exisitng книги в конце концов заблокировать -> Переименовать имя временного файла для существующего имени (теперь удалено) рабочей книги

    finally { 
         if (null != newCopy) { 
          newCopy.write(); 
          newCopy.close(); 
         } 
         if (null != workbook) { 
          workbook.close(); 
         } 
         if (null != errorFile && errorFile.exists()) { 
          errorFile.delete(); 
         } 
         if (null != tempFile) { 
          tempFile.renameTo(new File(errorFilePath)); 
         } 
    
        } 
    

    Проблемы все работает отлично для первого запустите (без перераспределения). Но всякий раз, когда я меняю какой-либо Java-код, и повторное развертывание веб-приложения, я получаю исключение из null-указателя, закрывая только что созданную книгу (после записи).

Я получаю следующую трассировку стека (происходящий из линии newCopy.write())

java.lang.NullPointerException 
at jxl.write.biff.CellValue.getData(CellValue.java:259) 
at jxl.write.biff.LabelRecord.getData(LabelRecord.java:141) 
at jxl.biff.WritableRecordData.getBytes(WritableRecordData.java:71) 
at jxl.write.biff.File.write(File.java:147) 
at jxl.write.biff.RowRecord.writeCells(RowRecord.java:329) 
at jxl.write.biff.SheetWriter.write(SheetWriter.java:479) 
at jxl.write.biff.WritableSheetImpl.write(WritableSheetImpl.java:1514) 
at jxl.write.biff.WritableWorkbookImpl.write(WritableWorkbookImpl.java:950) 

Java Версия: 1.6

JExcel Версия: 2.6.10

для Windows 7

+0

Опубликовать свой стекtrace ошибки –

+0

Вы генерируете файл xls или xlsx? –

+0

xls file ... и трассировка стека – Shiva

ответ

0

Ну, сперва подозрение, в этой строке:

label = new Label(column, row, stringData, times); 

вы передаете null аргумент (ы).

+0

Я проверил ... там не являются нулевыми аргументами ... и _ Проблема заключается в том, что все работает отлично для первого запуска (без повторного развертывания). Но всякий раз, когда я меняю какой-либо Java-код, а повторное развертывание веб-приложения, я получаю исключение из null-указателя, закрывая недавно созданную книгу (после написания)._ Почему только при перераспределении? – Shiva

0

Я столкнулся с той же проблемой. Я пытался добавить строки в лист динамически в цикле, используя insertRow. Проведя несколько часов, вероятно, это была ошибка в последней версии jxl api. JXL api после 2.6.9 похоже, имеет ошибку в insertRow. Я переключился на 2.6.9 с 2.6.12.