2012-03-31 9 views
6

Pracowałem nad dość złożonymi plikami excela i napotkałem problem z kopiowaniem arkuszy. Ilekroć próbuję skopiować arkusz, który nie jest całkowicie puste i otrzymaliśmy następującą wiadomość:Problemy z kopiowaniem arkuszy Excela za pomocą JExcel API

Exception in thread "main" java.lang.NullPointerException 
    at jxl.write.biff.WritableSheetCopier.shallowCopyCells(WritableSheetCopier.java:499) 
    at jxl.write.biff.WritableSheetCopier.copySheet(WritableSheetCopier.java:239) 
    at jxl.write.biff.WritableSheetImpl.copy(WritableSheetImpl.java:1622) 
    at jxl.write.biff.WritableWorkbookImpl.copySheet(WritableWorkbookImpl.java:987) 
    at excelCalc.main(excelCalc.java:18) 

Zastanawiam się, co jest tutaj problemem. Dlaczego miałaby istnieć funkcja ".copySheet (", gdyby nie można jej było użyć do arkuszy z zawartymi w niej informacjami.Aby spróbować odtworzyć problem w prostszej skali, stworzyłem kod, który widzisz poniżej. widzę to 2 identyczne arkusze z komórki (0,0) o etykietę „test”. Jeden arkusz o nazwie „płynie” z drugiej strony, „kopia”. Wszelkie pomysły, dlaczego to daje to wskaźnik zerowy?

import java.io.File; 

import jxl.*; 
import jxl.write.*; 

public class excelCalc 
{ 
    public static void main(String[] args) throws Exception 
    { 
     WritableWorkbook outputBook = Workbook.createWorkbook(new File("C:/Users/Kevin Brey/CS243/ExcelTest/files/output", "output.xls")); 

     WritableSheet rSheet = outputBook.createSheet("Flows", 0); 

     rSheet.addCell(new Label(0, 0, "test")); 
     outputBook.copySheet(0, "copy", 0); 
     outputBook.write(); 
     outputBook.close(); 
    } 
} 

EDIT: Ten kod daje również ten sam wyjątek:

import java.io.File; 

import jxl.*; 
import jxl.write.*; 

public class excelCalc 
{ 
    public static void main(String[] args) throws Exception 
    { 
     WritableWorkbook outputBook = Workbook.createWorkbook(new File("C:/Users/Kevin Brey/CS243/ExcelTest/files/output", "output.xls")); 

     WritableSheet sheet1 = outputBook.createSheet("Sheet1", 0); 
     WritableSheet sheet2 = outputBook.createSheet("Sheet2", 1); 

     sheet1.addCell(new Label(0, 0, "Label1")); 
     sheet2.addCell(new Label(0, 0, "Label2")); 

     outputBook.copySheet(0, "Copy", 1); 

     outputBook.write(); 
     outputBook.close(); 
    } 
} 

Jednym z moich pomysłów co może być nie tak jest, że skoro arkusz jest otwarty i został stworzony nie może być skopiowane. Naprawdę nie wiem, jak sobie z tym poradzić.

Odpowiedz

9

Jest to błąd w JXL-2.6.12.jar użyć JXL-2.6.10.jar zamiast.

Szczegóły:

typo '& &' do '&'

linia 493 - linia 504 w WritableSheetCopier.java

if (c != null) 
      { 
      toSheet.addCell(c); 

      // Cell.setCellFeatures short circuits when the cell is copied, 
      // so make sure the copy logic handles the validated cells   
      if (c.getCellFeatures() != null & 
       c.getCellFeatures().hasDataValidation()) 
      { 
       validatedCells.add(c); 
      } 
      } 

linia 540 - linia 551 w WritableSheetCopier.java

if (c != null) 
      { 
      toSheet.addCell(c); 

      // Cell.setCellFeatures short circuits when the cell is copied, 
      // so make sure the copy logic handles the validated cells   
      if (c.getCellFeatures() != null & 
       c.getCellFeatures().hasDataValidation()) 
      { 
       validatedCells.add(c); 
      } 
      } 

wiersz 990 - wiersz 1001 w SheetCopier.java

if (c != null) 
      { 
      toSheet.addCell(c); 

      // Cell.setCellFeatures short circuits when the cell is copied, 
      // so make sure the copy logic handles the validated cells 
      if (c.getCellFeatures() != null & 
       c.getCellFeatures().hasDataValidation()) 
      { 
       validatedCells.add(c); 
      } 
      } 
+1

wow, dziękuję! Pomyślałem, że coś jest nie tak z API, ale nie wiedziałem, czy poprzednie wersje pomogłyby. –

+0

@Yourchanges, Proszę sprawdź mnie (http://stackoverflow.com/questions/17078543/error-occured-in-copying-excel-sheet-with-jexel-api) – Cataclysm

0

arkusz kopia jest pusty, dodać kilka komórek do skopiowania arkusza przed skopiowaniem

+0

Mogę się mylić, ale myślę, że jestem. Dodaję komórkę do arkusza rSheet, który ma indeks 0. Następnie, gdy wywołuję copySheet, kopiuje on z arkusza w indeksie 0 i umieszcza nowy arkusz w indeksie 0 w prawo? Ive tried outputBook.copySheet (0, "copy", 1); wstawić kopię do indeksu 1, ale daje ten sam błąd. –

Powiązane problemy