Bearbeiten Von Exceldatei mit JExcelAPI

  • Themenstarter Themenstarter Spellsleeper
  • Beginndatum Beginndatum
S

Spellsleeper

Gast
Hallo mein Ziel ist das auslesen von Daten einer Html-Datei.Alles klappt soweit, allerdings möchte ich die Daten in einer Exceltabelle ausgeben lassen, dazu habe ich mir die JExcelAPI geladen. Auch dies hat gut funktioniert, nur nachdem die erste Zeile (Methode build() ) erstellt wurde schreibt er die anderen Zeilen nicht mehr(Methode write()). Der Fehler müsste in der Methode write() liegen(vermutlich habe ich die Verarbeitung der erstellten Excel-Datei falsch eingeleitet?!).Kennt sich jemand von euch mit der JExcelAPI aus, oder habe ich einen generellen,strukturellen Fehler gemacht?Danke für alle Hinweise.....

Spellsleeper🙂
Java:
package steuerberater;
import java.io.*;

import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

public class Input {
	
	WritableWorkbook workbook;
	WritableSheet sheet;
	WritableFont arial10font;
	WritableCellFormat arial10format; 
	File f=new File("C:/Dokumente und Einstellungen/dr/Desktop/Steuerberater.txt");
	int row=1;

	public void read() {
		Steuerberater sb=new Steuerberater();
		

		try{
			File f=new File("C:/Dokumente und Einstellungen/dr/Desktop/SteuerberaterHtmlKlassen.txt");
			BufferedReader br=new BufferedReader(new FileReader(f));
			String line=br.readLine();
			build();
			while(line!=null){

				if(line.startsWith("<span class=")){
					sb=new Steuerberater();
					sb.name=line.substring(line.indexOf("\">")+2,line.indexOf("</"));
					line=br.readLine();
					line=line.replaceAll("<b>", "");
					String[] felder=line.split("<br>");
					try{
						sb.strasse=felder[2];
					}catch(IndexOutOfBoundsException ind){}
					try{
						sb.plz=felder[3].trim().substring(0, 5);
					}catch(IndexOutOfBoundsException ind){}
					try{
						sb.ort=felder[3].trim().substring(6);
					}catch(IndexOutOfBoundsException ind){}
					try{
						sb.telefon=felder[5].replace("Telefon:", "").trim();
					}catch(IndexOutOfBoundsException ind){}
					
					line=br.readLine();
				}else if(line.startsWith("</div>-->")){
					write(sb);
					line=br.readLine();
				}else{
					line=br.readLine();}
			}
			br.close();
			
		}

		catch(Exception ex){ex.printStackTrace();}	
	}
	public void build()throws IOException, RowsExceededException, WriteException{
		workbook = Workbook.createWorkbook(new File("c:/Dokumente und Einstellungen/dr/Desktop/Steuerberater.xls"));
		sheet = workbook.createSheet("Steuerberater", 0);
        arial10font = new WritableFont(WritableFont.ARIAL, 10);
        arial10format = new WritableCellFormat (arial10font);
        Label label1 = new Label(0,0, "Arial 10 point label", arial10format);
        sheet.addCell(label1);
        label1.setString("Unternehmen");
        Label label2 = new Label(1,0, "Arial 10 point label", arial10format);
        sheet.addCell(label2);
        label2.setString("Straße");
        Label label3 = new Label(2,0, "Arial 10 point label", arial10format);
        sheet.addCell(label3);
        label3.setString("PLZ");
        Label label4 = new Label(3,0, "Arial 10 point label", arial10format);
        sheet.addCell(label4);
        label4.setString("Ort");
        Label label5 = new Label(4,0, "Arial 10 point label", arial10format);
        sheet.addCell(label5);
        label5.setString("Telefon");
        workbook.write();
        workbook.close();
	}
	public void write(Steuerberater sb) throws IOException, RowsExceededException, WriteException, BiffException{
		Workbook wb=Workbook.getWorkbook(new File("c:/Dokumente und Einstellungen/dr/Desktop/Steuerberater.xls"));
		workbook=Workbook.createWorkbook(new File("c:/Dokumente und Einstellungen/dr/Desktop/Steuerberater.xls"), wb);
		Label label1 = new Label(0,row, "Arial 10 point label", arial10format);
        sheet.addCell(label1);
        label1.setString(sb.name);
        Label label2 = new Label(1,row, "Arial 10 point label", arial10format);
        sheet.addCell(label2);
        label2.setString(sb.strasse);
        Label label3 = new Label(2,row, "Arial 10 point label", arial10format);
        sheet.addCell(label3);
        label3.setString(sb.plz);
        Label label4 = new Label(3,row, "Arial 10 point label", arial10format);
        sheet.addCell(label4);
        label4.setString(sb.ort);
        Label label5 = new Label(4,row, "Arial 10 point label", arial10format);
        sheet.addCell(label5);
        label5.setString(sb.telefon);
        workbook.write();
        workbook.close();
        row++;
	}
}
 
ohne JExcel zu kennen:
wieso musst du denn bei jedem write() und bei build() die Datei komplett neu einlesen und schreiben, kannst du das Workbook nicht offen halten?

> Workbook wb=Workbook.getWorkbook(new File("c:/Dokumente und Einstellungen/dr/Desktop/Steuerberater.xls"));
> workbook=Workbook.createWorkbook(new File("c:/Dokumente und Einstellungen/dr/Desktop/Steuerberater.xls"), wb);
sieht besonders schrecklich aus, wofür brauchst du wb bei dieser Sache?
zweimal gleichzeitig auf dieselbe Datei zugreifen geht evtl. nicht und insbesondere wird auf wb nie close() aufgerufen,
damit könnte die Datei bis zum Programmende auf für nächste write()-Methoden gesperrt bleiben

wenn du überhaupt desöfteren Lesen, Schreiben und was noch immer durcheinander machen musst,
dann überlege zumindest, Kopieren anzulegen und so auf mehrere Dateien zuzugreifen,
also etwa zu Beginn von write() Steuerberater.xls mit einfachen BufferedInputStreams in temp.xls kopieren,
aus temp.xls wird dann wb gelesen, workbook bleibt bei Steuerberater.xls,
 
Habe jetzt 3Methoden in einer kombiniert mit je 1* workbook.write();
workbook.close();
Es funktioniert.Scheinbar schließt write() den Sheet und close() dann endgültig das Workbook.
Trotzdem danke an alle die sich Gedanken gemacht haben!😉
 

Neue Themen


Zurück
Oben