Cześć,
Wielka prośba o pomoc z poniższym kodem. Próbuje napisać sobie kawałek programu który będzie mi automatyzował pewne czynności wykonywane w pliku excella.
Do odczytu i edycji plików xls używam Java Excel API (http://jexcelapi.sourceforge.net/)
Póki co napotkałem na następujące problemy, które być może ktoś byłby w stanie pomóc rozwiązać.
- Nie znalazłem nigdzie metody do otwarcia pliku xls i jego edycji. Czy jedyną opcją w tym API jest utworzenie nowego pliku xls i skopiowanie zawartości starego metodą Workbook.createWorkbook();
- Chciałbym wykonać operację skopiowania ostatniego arkusza.
W kodzie próbowałem użyć do tego metody copySheet oraz importSheet (trochę na około ale jak pierwsza nie działała to próbowałem kolejnej).
Obie zwracają wyjątek NullPointerException. Metoda printStackTrace wyrzuca następujący komunikat:
java.lang.NullPointerException
at jxl.write.biff.SheetCopier.deepCopyCells(SheetCopier.java:996)
at jxl.write.biff.SheetCopier.importSheet(SheetCopier.java:542)
at jxl.write.biff.WritableSheetImpl.importSheet(WritableSheetImpl.java:2699)
at jxl.write.biff.WritableWorkbookImpl.importSheet(WritableWorkbookImpl.java:1897)
at de.vogella.java.excel.reader.ReadExcell.read(ReadExcell.java:51)
at de.vogella.java.excel.reader.ProtocoleMaker.main(ProtocoleMaker.java:17)
Czy ktoś ma na to pomysł?
3. Czy znacie może jakieś inne lepsze API do odczytu i zapisu plików excella ?
Z góry dzięki za pomoc.
public class ReadExcell {
private String inputFile;
public void setInputFile(String inputFile) {
this.inputFile = inputFile;
}
public void read() throws IOException {
File baseWorkbook = new File(inputFile);
File outputWorkbook = new File("c:/temp/protokol2.xls");
Workbook w;
String[] Miesiace = {"Styczen", "Luty", "Marzec", "Kwiecien", "Maj", "Czerwiec", "Lipiec", "Sierpien", "Wrzesien", "Pazdziernik", "Listopad","Grudzien"};
try {
w = Workbook.getWorkbook(baseWorkbook);
System.out.println("nazwy arkuszy");
System.out.println(w.getSheets().length);
WritableWorkbook wr = Workbook.createWorkbook(outputWorkbook, w);
LocalDate Data = LocalDate.now();
String SheetName = "";
if (Data.getDayOfMonth() < 17)
{
SheetName = Miesiace[Data.getMonthValue()-1]+"_"+Data.getYear();
}
else
{
SheetName = Miesiace[Data.getMonthValue()]+"_"+Data.getYear();
}
System.out.println(wr.getSheets().length);
Sheet wsp = w.getSheet(wr.getSheetNames().length-1);
System.out.println(wsp.getName());
System.out.println(SheetName);
WritableSheet wsn = wr.importSheet(SheetName, wr.getNumberOfSheets()-1, wsp);
wr.write();
wr.close();
} catch (BiffException e) {
System.out.println("BiffException ");
e.printStackTrace();
}
catch (WriteException e) {
System.out.println("WriteException ");
e.printStackTrace();
}
catch (NullPointerException e) {
System.out.println("Null pointer exception");
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
}
}