# JExcel: File einlesen und Werte anhängen



## magic_halli (7. Okt 2008)

Hi,

ich möchte mit JExcel eine vorhandene Exceldatei einlesen, die Anzahl der Zeilen ermitteln und dann eine neue Zeile ans Ende anhängen.
Hier ist die "Vorarbeit" mit dem Einlesen und der Zeilenermittlung, nur weiß ich nicht recht, wie ich direkt im Anschluß auf die bereits eingelesen Datei schreibend zugreifen soll/kann:

```
File file = new File(path + "test.xls");
      if( file.exists()){
         // vorhandene test.xls einlesen
         Workbook workbookRead = Workbook.getWorkbook(file);
         // Sheet wählen
         Sheet sheetRead = workbookRead.getSheet(0);
         // Anzahl der Zeilen des aktuellen Sheet ermitteln
         int iRows = sheetRead.getRows();

         // hier jetzt in die Zeile 'iRows+1' neue Daten schreiben - WIE?

       
         //Workbook wieder schließen
         workbookRead.close();
      }
```
Wie muss das neu-einfügen von Werten an der von mir gedachten Stelle syntaktisch aussehen?
Ich kenne zwar die Syntax, um ein neues WritableWorkbook/WritableSheet zu erstellen und zu füllen, aber nicht die Syntax, um auf ein vorhandenes/eingelesenes Workbook/Sheet (wie bei mir hier) schreibend einzuwirken.

Danke und Gruß


----------



## Mr. (7. Okt 2008)

Hi...

also ich bin auch nicht so versiert und eigentlich blutiger Anfänger aber ich habe das so gemacht:


```
Label label = new Label(spalte, zeile, inhalt);
sheet.addCell(label);
```

Gruß

Mr.


----------



## tobi88 (7. Okt 2008)

Ich bin gerade selber dran daten zu exportieren. Der Code wird dir bestimmt weiter helfen 


```
import java.io.File;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

public class DemoJExcel {
	
	private static Workbook workbook;
	private static WritableWorkbook copy;
	
	private static WritableSheet sheet;
	
	private static Label label;

	
	
	public static void exportExcel( String inputExcelDokumentname, String exportExcelDokumentname )
	{
				
		try {
			workbook = Workbook.getWorkbook(new File(inputExcelDokumentname));
			copy = Workbook.createWorkbook( new File(exportExcelDokumentname), workbook);
			sheet = copy.getSheet(0);
			
			int rowCount = sheet.getRows();
			
			//neue Zeile unten anhängen
			createLabelCell( 0, rowCount, "Neuer Wert!");
			
			
			copy.write();
			copy.close();
			
		} catch (Exception e) {
			e.printStackTrace();
		}

	}
	
	public static void createLabelCell( int col, int row, String value ) throws RowsExceededException, WriteException {
	
		label = new Label(col, row, value);
		sheet.addCell(label); 
		
	}
	
	public static void main(String[] args) {
		exportExcel( "ProtokollVorlage.xls", "ProtokollVorlage.xls" ); //Datei wird überschrieben
		}

}
```


mfg
Tobi

ps: weiß jemand wie man eine leere zelle mit formatierten rahmen erstellen kann?

EDIT:

Mein bisheriger Code der nicht so geht, wie ich gerne möchte 

```
public static void addCellNull( int col, int row ) throws RowsExceededException, WriteException
	{			
		EmptyCell empty = new EmptyCell( col, row);
		empty.setBorder( Border.ALL, BorderLineStyle.DOTTED );
		sheet.addCell( empty );
	}
```


----------



## magic_halli (7. Okt 2008)

Hi tobi... ja, ich hab bei Dir die eine Codezeile gefunden, die ich eigentlich gesucht habe.  :wink: 

```
copy = Workbook.createWorkbook( new File(exportExcelDokumentname), workbook);
```
Somit kann ich schreibend auf das eingelesene Workbook zugreifen - prima.
Der Rest ist dann bei mir ähnlich...

```
File file = new File(path + "test.xls");
int currentColumn = 0;

   if( file.exists()){
      // vorhandene test.xls einlesen
      Workbook workbookRead = Workbook.getWorkbook(file);
      // Sheet wählen
      Sheet sheetRead = workbookRead.getSheet(0);
      // Anzahl der Zeilen des aktuellen Sheet ermitteln
      int iRows = sheetRead.getRows();

      // hier jetzt in die Zeile 'iRows' neue Daten schreiben
      WritableWorkbook workbook = Workbook.createWorkbook(file, workbookRead);
      WritableSheet sheet = workbook.getSheet(0);
      // Werte hinten anhängen
      sheet.addCell(new Label(currentColumn++, iRows, "testZelle1"));

      workbook.write();
      workbook.close();
   }
```
So, mein Testeintrag wird erstmal soweit sogut eingefügt...
Komisch ist nur, dass es mir beim Einfügen meines Testeintrages plötzlich allen bisherigen Text im xls-File als so komische kleine Vierecke darstellt und bei erneutem ausführen ist der Text plötzlich wieder leserlich!!! Außerdem fügt es mir über jeden Testeintrag eine extra Zeile mit auch diesen seltsamen Vierecken ein! ???:L 
Hier mal ein Darstellungsbsp.:

```
琀攀猀琀娀攀氀氀攀㄀
testZelle1
```
Mh, hat jemand ne Idee, warum sich das so verhalten könnte?

Gruß


----------



## tobi88 (7. Okt 2008)

Bei mir geht dein Code wunderbar. Ich weiß nicht warum du so Zeichen bekommst.... vielleicht liegt es an deinem exceldokument. erstell dir mal ein neues und fusch dadrinne rum.








```
Blank blank = new Blank(col, row);
sheet.addCell ( blank );
```

Kann ich schon mal ein leeres Feld einfügen  weiß nur noch nicht wie man formatiert


----------



## tobi88 (8. Okt 2008)

```
WritableFont arial10font = new WritableFont(WritableFont.ARIAL, 10, WritableFont.BOLD); 
		WritableCellFormat arial10format = new WritableCellFormat (arial10font);
		arial10format.setBorder( Border.ALL, BorderLineStyle.THIN );		
		
		
		Blank blank = new  Blank(col, row, arial10format);
		sheet.addCell( blank );
```

Hiermit kann man eine leere Zelle erstellen, die wie folgt formatiert ist:

-Schriftart Arial
-Schriftgröße 10
-Fett
-Zelle ist komplett mit einer schwarzen dünnen linie umrandet.




Man schauen. vielleicht erstelle ich mal ein kleinen JExcel Tutorial. Besteht denn darin Interesse???

Gruß
Tobi


----------



## terrly (20. Nov 2008)

hallo tobi88,

vielen Dank für die nützliche Infos. Für jeden möglichen Java Tutorials habe ich Interesse.

Danke...


----------



## tobi88 (20. Nov 2008)

freut mich, dass einer interesse zeigt.

dann werde ich mal am wochenende hinsetzen und was zusammen basteln. hoffe ich finde zeit dafür.


----------



## Gast (21. Nov 2008)

Vielen Dank werde auch am Wochenende hinsetzen und einarbeiten. Ich warte ganz gespannt deine Tutorials.

vielen Dank im Voraus.


----------



## Guest (24. Nov 2008)

moin,

ich habe leider am wochenende keine zeit gefunden. habe aber schon an der arbeit angefangen was zu schreiben. werde es dienstag abend reinstellen.

gruß
tobi


----------



## Guest (24. Nov 2008)

Hallo,

ich hab die Erfahrung gemacht, dass wenn ich mehr als die 255 Zeichen in eine Zelle Packe Excel damit nicht zurecht kommt und dann unter anderem auch solche Zeichen dabei rauskommen... Also schön auf die Zeichanzahl achten oder OO verwenden  Dort hatte ich das Problem nicht...

Gruß


----------



## Gast (20. Jan 2009)

Hallo,

 ich habe ein Problem, vielleicht könnte mir jemand helfen.

 Ich habe eine Excel Tabelle, die mir eine Funktion berechnet. Die erste Spalte enthält Input-Daten, die ich ändern kann und die zweite Spalte die Output-Daten, die ich ablesen sollte. Die zweite Spalte enthält eine Formel,  die meine Funktion automatisch berechnet. Wenn ich die Daten in die erste Spalte schreibe (funktioniert einwandfrei) und danach das Ergebnis aus der zweiten Spalte auslese, erhalte ich nicht die aktuelle Daten, sondern die vorherigen. Wenn ich aber die Datei mit Excel aufmache, sehe ich die richtigen Ergebnisse. Bei der Schließung der Datei werde ich gefragt, ob ich die speichern möchte. Wenn ich "JA" sage und danach wieder die Lese-Methode aufrufe, nur dann kriege ich die richtigen Ergebnisse. Der Hacken ist wahrscheinlich bei der Zellen mit der Formeln, sie werden nicht mit der write()-Methode gespeichert. Weißt jemand vieleicht, wie man das lösen kann. Im Voraus vielen Dank!!!


----------

