# jexcel+spreadsheets



## polenben (20. Februar 2008)

Hallöchen,
ich will mit jexcel mehrere Workbooks in ein zentrales Workbook zusammenfassen, jedoch scheitert es bei mir so quasi an allen Ecken und Enden.

Mit der copyTo() Methode funktioniert es scheinbar nicht und sogar wenn ich alle Strings der zu schreibenden Daten festlege mit Hardcopy dann gibt er keine Datei aus...


```
Workbook workbook= Workbook.getWorkbook(new File("myFile.xls"));  
		Sheet sheet = workbook.getSheet(0);
	


		String cellText = sheet.getCell(3,3).getContents();
		String cellText1= sheet.getCell(3,4).getContents();
		String cellText2= sheet.getCell(9,3).getContents();
		String cellText3= sheet.getCell(9,4).getContents();


WritableWorkbook workbookOUT = Workbook.createWorkbook(new File("MyOutputFile.xls"));	
		WritableSheet sheet1 = workbookOUT.createSheet("Gesamt",0);
		
		Label label = new Label(3, 3, cellText); 
		sheet1.addCell(label); 
		Label label1 = new Label(3, 4, cellText1); 
		sheet1.addCell(label1); 
		Label label2 = new Label(9, 3, cellText2); 
		sheet1.addCell(label2); 
		Label label3 = new Label(9, 4, cellText3); 
		sheet1.addCell(label3);
```

Mein Problem ist jetzt, wenn eine Zelle leer ist, dann wir das Programm zwar bis zum Schluss ausgeführt, jedoch schreibt er mir dann keine Datei ins Verzeichniss.

Ich habs auch schon mit einer Schleife versucht:


```
if (sheet.getCell(3,3).equals("")){ 
		System.out.println("Zelle leer!");
	}
	else{
		String cellText = sheet.getCell(3,3).getContents();
	}
```

Bin um jede Hilfe dankbar
vg Benni


----------



## MeinerEiner_80 (20. Februar 2008)

Moin!
Ich kenne mich mit JExcel zwar überhaupt nicht aus, aber ich kann dir sagen,
dass dies hier mit Sicherheit nicht funktioniert.

```
if (sheet.getCell(3,3).equals("")){ 
        System.out.println("Zelle leer!");
    }
    else{
        String cellText = sheet.getCell(3,3).getContents();
    }
```

getCell() liefert eine Zelle zurück. Die wirst du kaum erfolgreich mit einem String vergleichen können.

*grüssle*
MeinerEiner

PS


> Ich habs auch schon mit einer Schleife versucht:


"If " ist eine Bedingung, keine Schleife!


----------



## polenben (20. Februar 2008)

Jop das Problem mit getCell hatte ich schon behoben.Aber trotzdem nochmal danke. Aber auch, wenn ich es in anderen Varianten teste, bekomme ich keinen funktionierenden Code.
Kennst du dich dann mit Apache POI aus? Oder mit einer vergleichbaren API.


----------



## mki_germo (20. Februar 2008)

Mit POI hab ich schon gearbeitet - ist eigendlich recht gemütlich mit zu arbeiten und vor allem schneller als jExcel, dass ja mit COM arbeitet und nicht direkt auf der Dateiebene.

Was benötigst du denn?


----------



## polenben (20. Februar 2008)

ich will aus mehreren Exceldatein Daten auslesen und zentral in einer anderen Exceldatei speicher. Und dabei enstanden bei mir eben diese Probleme. 
Hast du da evtl schon einen Code mit POI?


----------



## mki_germo (20. Februar 2008)

Hab dir mal kurz was vorbereitet:


```
package de.germo.poi;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class POIDemo {
	
	public POIDemo() {
		File f = new File("poidemo.xls");
		if (f.exists()) {
			f.delete();
		}
		writeExcelFile(f);
		readExcelFile(f);
	}
	
	private void readExcelFile(File xls) {
		FileInputStream fis = null;
		try {
			fis = new FileInputStream(xls);
			HSSFWorkbook wb = new HSSFWorkbook(fis);
			HSSFSheet sheet = wb.getSheet("Tabelle1");
			int rows = sheet.getLastRowNum();
			for (int i = 1; i < rows; i++) {
				HSSFRow row = sheet.getRow(i);
				if (row != null) {
					HSSFCell cell = row.getCell((short) 0);
					int type = cell.getCellType();
					switch (type) {
					case HSSFCell.CELL_TYPE_BLANK: 
						System.out.println("Zelle A:" + i + ": Typ = leere Zelle");
						break;
					case HSSFCell.CELL_TYPE_BOOLEAN: 
						System.out.println("Zelle A:" + i + ": Typ = Bool'scher Wert, Inhalt:" + cell.getBooleanCellValue());
						break;
					case HSSFCell.CELL_TYPE_ERROR: 
						System.out.println("Zelle A:" + i + ": Typ = Fehler, Inhalt:" + cell.getErrorCellValue());
						break;
					case HSSFCell.CELL_TYPE_FORMULA: 
						System.out.println("Zelle A:" + i + ": Typ = Formel, Inhalt:" + cell.getCellFormula());
						break;
					case HSSFCell.CELL_TYPE_NUMERIC: 
						System.out.println("Zelle A:" + i + ": Typ = Numerisch, Inhalt:" + cell.getNumericCellValue());
						break;
					case HSSFCell.CELL_TYPE_STRING: 
						System.out.println("Zelle A:" + i + ": Typ = Text, Inhalt:" + cell.getRichStringCellValue().getString());
						break;
					default:
						System.out.println("Nicht erkanntes Zellformat");			
					}
				}
			}
			fis.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	private void writeExcelFile(File xls) {
		HSSFWorkbook wb = new HSSFWorkbook();
	    HSSFSheet sheet = wb.createSheet("Tabelle1");
	    HSSFRow row = sheet.createRow((short)0);
		HSSFCell cell = row.createCell((short)0);
		cell.setCellType(HSSFCell.CELL_TYPE_BLANK);
		
		row = sheet.createRow((short) 1);
		cell = row.createCell((short) 0);
		cell.setCellType(HSSFCell.CELL_TYPE_BOOLEAN);
		cell.setCellValue(true);
		
		row = sheet.createRow((short) 2);
		cell = row.createCell((short) 0);
		cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);
		cell.setCellFormula("A4");
		
		row = sheet.createRow((short) 3);
		cell = row.createCell((short) 0);
		cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
		cell.setCellValue(1.25);
		
		row = sheet.createRow((short) 4);
		cell = row.createCell((short) 0);
		cell.setCellType(HSSFCell.CELL_TYPE_STRING);
		HSSFRichTextString text = new HSSFRichTextString("Hallo Excel, Hallo POI");
		cell.setCellValue(text);
		
		FileOutputStream fileOut;
		try {
			fileOut = new FileOutputStream(xls);
			wb.write(fileOut);
		    fileOut.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String args[]) {
		new POIDemo();
	}
}
```

Benutzt wurde POI 3.0.1 und JAVA 1.6.
Ich hoffe mal, das das soweit selbsterklärend ist, falls nicht, einfach fragen.


----------

