Excel File öffnen, in Zelle schreiben, abspeichern

Hallo,
wie der Titel sagt, ich möchte in eine bestehende Excel File etwas reinschreiben. Das Problem anfangs war, dass mein Code zwar reingeschrieben hat, aber nicht abgespeichert hat. Mittlerweile bin ich an der Stelle gelandet und erhalte folgende Fehlermeldung. Dabei wird auch immer die Excel-Datei "zerstört"... (0 kb Größe der Datei)

Java:
java.lang.NoClassDefFoundError: org/apache/commons/collections4/bidimap/TreeBidiMap
Java:
package müll;

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

import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFName;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;


public class PasteInExcelSheet {
    

        /**
         * @param args
         * @throws IOException 
         */
        public static void main(String[] args) throws IOException {
            
            int schreibInZelle = 1992;    
            

            
                InputStream input = new FileInputStream("D:/leer.xls");
                HSSFWorkbook wb = new HSSFWorkbook(input);
                HSSFSheet sheet = wb.getSheet("Tabelle1");
                

            
                HSSFCell ausgewaehlteZelle = sheet.createRow(6).createCell(11);
//                       ausgewaehlteZelle.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
                         ausgewaehlteZelle.setCellValue(schreibInZelle);
                         System.out.print(sheet.getRow(6).getCell(11));


/*
Ab hier soll gespeichert/überschrieben werden. Hatte zuvor
                            wb.write();
                            wb.close();
stehen, was aber dieselbe Fehlermeldung erzeugt hat 
*/

                 OutputStream fileOut = new FileOutputStream("D:/leer.xls");
                 wb.write(fileOut);
            
    }

}
 
Hab die vorherigen gelöscht und deinen reingepackt. Jetzt kommt das hier:

Java:
Exception in thread "main" org.apache.poi.poifs.filesystem.NotOLE2FileException: Invalid header signature; read 0x0000000000000000, expected 0xE11AB1A1E011CFD0 - Your file appears not to be a valid OLE2 document
    at org.apache.poi.poifs.storage.HeaderBlock.<init>(HeaderBlock.java:151)
    at org.apache.poi.poifs.storage.HeaderBlock.<init>(HeaderBlock.java:117)
    at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:294)
    at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:400)
    at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:381)
    at müll.PasteInExcelSheet.main(PasteInExcelSheet.java:37)
 
Nur eine Vermutung: du schließt weder input- noch output stream. Der input stream ist noch offen, während der output stream in die selbe Datei schreiben soll.
 
So klappt es:

Java:
public class PasteInExcelSheet {
    

        /**
         * @param args
         * @throws IOException 
         */
        public static void main(String[] args) throws IOException {
            
            int schreibInZelle = 13992;    
            

            
                FileInputStream input = new FileInputStream("D:/leer.xls");
                POIFSFileSystem fs = new POIFSFileSystem(input);
                HSSFWorkbook wb = new HSSFWorkbook(fs);
                HSSFSheet sheet = wb.getSheet("24550");
                

                HSSFCell ausgewaehlteZelle = sheet.getRow(10).getCell(11);

                         System.out.print(ausgewaehlteZelle);
                         input.close();
                         


                         OutputStream fileOut = new FileOutputStream("D:/leer.xls");
                         ausgewaehlteZelle.setCellValue(schreibInZelle);
                         
                
                         wb.write(fileOut);
                         wb.close();
                         fileOut.close();
            
    }

}
Vom klappen mal abgesehen, ist jetzt alles richtig, oder sind da noch Fehler im Code? Wegen öffnen/schließen etc.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben