Apache POI-Datei lesen und umschreiben

ehc

Mitglied
Hallo,

ich arbeite mich gerade in POI ein (HSSF/.xls) und bin jetzt auf das lesen, bearbeiten und speichern einer Ecxel-Tabelle gestoßen. Ich wollte also wie in meiner Hilfe (Busy Developers' Guide to HSSF and XSSF Features) beschreiben eine Datei auslesen, und bearbeiten. Das ging auch ganz gut... bis ich die einzulendene Datei änderte!
Wenn ich: InputStream inp = new FileInputStream("D:/workbook.xls"); stehen lasse geht es! (Zeile 23) Wenn ich aber jetzt workbook2.xls (JA die Datei gibt es) schreibe gibt er mir einen Fehler! (siehe unten) :bahnhof:

Kann mir bitte jemand Helfen und sagen was ich falsch mache?!?

Java:
package na.meins;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;


public class LesenUndSchreiben {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws IOException{
		// TODO Auto-generated method stub
		
		InputStream inp = new FileInputStream("D:/workbook.xls");
		
		HSSFWorkbook wb = new HSSFWorkbook(inp);
	    Sheet sheet = wb.getSheetAt(0);
	    Row row = sheet.getRow(1);
	    Cell cell = row.getCell(0);
	    if (cell == null)
	        cell = row.createCell(3);
	    cell.setCellType(Cell.CELL_TYPE_STRING);
	    cell.setCellValue("BEARBEITET");

	    // Write the output to a file
	    FileOutputStream fileOut = new FileOutputStream("workbookbearbeitet.xls");
	    wb.write(fileOut);
	    fileOut.close();

	}

}

Fehlermeldung:

Exception in thread "main" java.lang.NullPointerException
at de.deutscherv.bund.geraeteverzeichnis.LesenUndSchreiben.main(LesenUndSchreiben.java:31)

Ich hoffe ihr versteht was ich meine.
mfg
ehc
 
[c]cell[/c] ist [c]null[/c]. Gut möglich, dass POI [c]null[/c] zurück gibt, wenn die Zelle weder ein bestimmtes Format noch Inhalt besitzt.
 
Ja aber wenn ich das mit dem workbook.xls mache schreibt er mir BEARBEITET in die eine leere Zeile... wenn ich aber workbook2.xls schreibe gibt er mir den fehler...auch wenn ich das Feld ändere wo er BEARBEITET rein schreiben soll!
 
Bei mir funktioniert dein Code. Du musst halt auch schauen, ob deine workbook2.xls schon was in der 2ten Zeile stehen hat, sonst bringt dir das
Java:
sheet.getRow(1)
nichts anderes als NULL zurück.

Wenn es keine persönlichen Daten sind, kannst du auch gerne die xls hochladen, dann schau ich mir das nochmal genauer an.
 
Daraus ergibt sich folglich:

Java:
        if(sheet.getRow(1)!= null){
        	row = sheet.getRow(1);
        
        }else{
        	row = sheet.createRow(1);
        }
    	
        Cell cell = row.getCell(0);
        
    	if (cell == null){
    	
    		cell = row.createCell(3);
    		cell.setCellType(Cell.CELL_TYPE_STRING);
    		cell.setCellValue("BEARBEITET");
    		
    		  // Write the output to a file
            FileOutputStream fileOut = new FileOutputStream("C:/workbookbearbeitet.xls");
            wb.write(fileOut);
            fileOut.close();
    	}
        }

Würde die Abfragen vlt Zusammenfassen, aber hauptsache du verstehst worum es geht.
 
Ich wollte mein workbook hochladen doch leider macht er das nicht aber egal da stehen nur ein paar worte drinnen sowas wie TEXT und so... also nix besonderes!
 
So jetzt ja danke!
Das geht so... ich komme nur halt noch etwas durcheinander aber es geht erst mal so wie es gehen sollte!

Danke!
 

Neue Themen


Zurück
Oben