Mit POI Zeile in Excel löschen

Status
Nicht offen für weitere Antworten.

Jules

Mitglied
Hallo zusammen,

ich habe eine Frage zum Thema POI.
Und zwar lösche ich in einem Excelsheet mit der Methode removeRow eine Zeile und rücke alle darunterliegenden Zeilen mit shiftRow eins höher.
Also wenn ich nun 10 Zeilen habe und Zeile 5 gelöscht wird, werden Zeile 6 bis 10 auf Position 5 bis 9 hochgerückt. Nun habe ich das Problem, dass Zeile 10 zwar leer ist, aber trotzdem noch als vorhandene Zeile (mit leeren Spalten) erkannt wird. Der rowIterator zählt auch die leere, so eben gelöschte Zeile mit.
Warum tut er das und wie kann ich die letzte Zeile entgültig löschen?

Hier das löschen und verschieben der Zeilen
Code:
HSSFRow row = mySheet.getRow(rowNumber); 

//Zeile löschen
mySheet.removeRow(row);	
        
//Zeilen unter der gelöschten Zeile eins hochgerücken, von totalCountsOfRows eins abziehen, da index bei 0 beginnt
mySheet.shiftRows(rowNumber, totalCountOfRows-1, -1);

Und hier das iterieren über die Excel-Tabelle
Code:
	public static Vector readExcelFile() throws Exception
       {
	  Vector cellVectorHolder = new Vector();
		   	
	  HSSFWorkbook myWorkBook = prepareExcelSheet();
    	
          HSSFSheet mySheet = myWorkBook.getSheetAt(0);
  
          Iterator rowIter = mySheet.rowIterator(); 
          while(rowIter.hasNext()){
        	  HSSFRow myRow = (HSSFRow) rowIter.next();
        	  Iterator cellIter = myRow.cellIterator();
        	  Vector cellStoreVector=new Vector();
        	  while(cellIter.hasNext()){
        		  HSSFCell myCell = (HSSFCell) cellIter.next();
        		  cellStoreVector.addElement(myCell);
        	  }
       		  cellVectorHolder.addElement(cellStoreVector); 
          }
    	  return cellVectorHolder;
    }

Kann jemand helfen? :bahnhof:
 
S

SlaterB

Gast
remove-Aufruf?

Java:
public class Test
{

    public static void main(String[] args)
        throws Exception
    {
        POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("c:/temp/test.xls"));
        HSSFWorkbook workbook = new HSSFWorkbook(fs);
        HSSFSheet s = workbook.getSheetAt(0);
        System.out.println(s.getLastRowNum() + ", " + s.getRow(5));
        s.shiftRows(2, 5, -1);
        System.out.println(s.getLastRowNum() + ", " + s.getRow(5));
        s.removeRow(s.getRow(5));
        System.out.println(s.getLastRowNum() + ", " + s.getRow(5));

        FileOutputStream out = new FileOutputStream(new File("c:/temp/test2.xls"));
        workbook.write(out);
        out.close();
    }

}
Ausgabe:
Code:
5, org.apache.poi.hssf.usermodel.HSSFRow@360be0
4, org.apache.poi.hssf.usermodel.HSSFRow@360be0
4, null

im Anhang die Test-Datei, als txt getarnt,
was genau geht nun nicht? falls die Java-Ausgabe anders ist: andere POI-Version?
 

Anhänge

  • test.txt
    13,5 KB · Aufrufe: 9

Jules

Mitglied
Hallo SlaterB,

danke für deine Antwort.
Das Problem liegt mehr oder weniger im Iterator.
Wenn ich, wie in deinem Beispiel 5 befüllte Zeilen in einem ExcelSheet habe und die 5te Zeile lösche ist dort zwar kein Inhalt mehr drin, aber wenn ich mit dem rowIterator() den Inhalt der des ExcelSheets in einen Vector einlese und mir anschließend die Größe des Vektors ausgeben lasse, ist diese immer noch bei 5 und nicht 4 Zeilen... der Iterator zählt jede zuvor gelöschte Zeile mit... Merkwürdig ist jedoch, dass der cellIterator() merkt, dass sich in den Zellen dieser Zeile kein Inhalt mehr befindet und nicht weiter iteriert. Der rowIterator iteriert jedoch munter weiter über die gelöschten Zeilen.
 
S

SlaterB

Gast
ich sehe keinen Unterschied zwischen Iterator und getRow()

die Row ist noch da solange nicht removeRow() aufgerufen wird, ja,
warum weiß ich auch nicht, außer vielleicht aus Sparsamkeit, um später nicht eine neue Row anlegen zu müssen

dennoch ist removeRow möglich, auch für den Iterator:
Java:
public class Test
{


    public static void main(String[] args)
        throws Exception
    {
        POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("c:/temp/test.xls"));
        HSSFWorkbook workbook = new HSSFWorkbook(fs);
        HSSFSheet s = workbook.getSheetAt(0);
        System.out.println("0: " + s.getRow(0));
        System.out.println("1: " + s.getRow(1));
        System.out.println("2: " + s.getRow(2));
        System.out.println("3: " + s.getRow(3));
        System.out.println("4: " + s.getRow(4));
        System.out.println("5: " + s.getRow(5));
        System.out.println("last: " + s.getLastRowNum() + ", " + s.getRow(5));
        s.shiftRows(2, 5, -1);
        System.out.println("last: " + s.getLastRowNum() + ", " + s.getRow(5));
        Iterator iter = s.rowIterator();
        while (iter.hasNext())
        {
            System.out.println(iter.next());
        }
        s.removeRow(s.getRow(5));
        System.out.println("last: " + s.getLastRowNum() + ", " + s.getRow(5));
        iter = s.rowIterator();
        while (iter.hasNext())
        {
            System.out.println(iter.next());
        }
        FileOutputStream out = new FileOutputStream(new File("c:/temp/test2.xls"));
        workbook.write(out);
        out.close();
    }

}

Code:
0: org.apache.poi.hssf.usermodel.HSSFRow@360be0
1: null
2: org.apache.poi.hssf.usermodel.HSSFRow@45a877
3: org.apache.poi.hssf.usermodel.HSSFRow@1372a1a
4: org.apache.poi.hssf.usermodel.HSSFRow@ad3ba4
5: org.apache.poi.hssf.usermodel.HSSFRow@126b249
last: 5, org.apache.poi.hssf.usermodel.HSSFRow@126b249
last: 4, org.apache.poi.hssf.usermodel.HSSFRow@126b249
org.apache.poi.hssf.usermodel.HSSFRow@360be0
org.apache.poi.hssf.usermodel.HSSFRow@182f0db
org.apache.poi.hssf.usermodel.HSSFRow@45a877
org.apache.poi.hssf.usermodel.HSSFRow@1372a1a
org.apache.poi.hssf.usermodel.HSSFRow@ad3ba4
org.apache.poi.hssf.usermodel.HSSFRow@126b249
last: 4, null
org.apache.poi.hssf.usermodel.HSSFRow@360be0
org.apache.poi.hssf.usermodel.HSSFRow@182f0db
org.apache.poi.hssf.usermodel.HSSFRow@45a877
org.apache.poi.hssf.usermodel.HSSFRow@1372a1a
org.apache.poi.hssf.usermodel.HSSFRow@ad3ba4
 

Jules

Mitglied
Ok, ich sehe meinen Fehler.
Ich muss nach dem shiftRow() noch mal explizit einen removeRow() machen. Bisher habe ich z.B. Zeile 3 gelöscht, dann Zeile 4-5 auf Position 3-4 verschoben und habe angenommen, dass somit Zeile 5 automatisch verschwindet.

Danke für deine Hilfe!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H JavaFX Warnung in package Zeile Allgemeine Java-Themen 2
8u3631984 Strukturiertes Logging : Jedes Feld in eine seperate Zeile - aber wie ? Allgemeine Java-Themen 2
_user_q Eingegebenen Text Zeile für Zeile ausgeben lassen Allgemeine Java-Themen 11
melaniemueller Einzelne Zeile aus einer txt Datei in einem String speichern Allgemeine Java-Themen 12
jhCDtGVjcZGcfzug Klassen Was genau passiert hier? Kann mir das jemand bitte Zeile für Zeile erklären? Allgemeine Java-Themen 1
M Checkstyle 100 Zeichen pro Zeile Allgemeine Java-Themen 11
O Formatierte String ausgabe bei vier Variablen in einer Zeile Allgemeine Java-Themen 1
Bluedaishi Zeile um zeichen erweitern Allgemeine Java-Themen 9
M String automatisch in nächste Zeile umbrechen (Graphics) Allgemeine Java-Themen 6
J Bestimmte Zeile aus Textdatei auslesen Allgemeine Java-Themen 18
KeVoZ_ Nacheinander folgende Strings in Textdokument auf neue Zeile schreiben Allgemeine Java-Themen 6
D falsche Zeile aus JTable in MySQL gelöscht Allgemeine Java-Themen 6
C PDFBox: Nach RegEx ganze Zeile Allgemeine Java-Themen 4
KeVoZ_ Bestimmte Zeile aus Console finden & auslesen Allgemeine Java-Themen 2
F Fehler in Zeile in Log schreiben Allgemeine Java-Themen 6
X Zeile unter einer bestimmen Zeile hinzufügen(File) Allgemeine Java-Themen 1
X Löschen von einer Zeile in einer Text Datei. Klappt nicht. Allgemeine Java-Themen 4
F String nach Schlüsselwörtern durchsuchen und ganze Zeile ausgeben Allgemeine Java-Themen 4
C Speicherung fon Zeile und Spalte Allgemeine Java-Themen 2
J Java - Zeile aus Text datei löschen Allgemeine Java-Themen 13
S CSV Eintrag der nächsten Zeile auslesen funktioniert nicht Allgemeine Java-Themen 8
Ananaskirsche Input/Output Zeile aus Datei einlesen Allgemeine Java-Themen 10
F JTextArea Cursor in die nächste Zeile setzen Allgemeine Java-Themen 2
C Input/Output Bestimmte Zeile in Datei ändern. Allgemeine Java-Themen 13
M Startdatei konnte nicht geparst werden. Fehler in Zeile 0 Allgemeine Java-Themen 5
127.0.0.1 StringBuffer leere Zeile löschen Allgemeine Java-Themen 8
S Die Zeile die JUnit gerade ausführt lesen Allgemeine Java-Themen 15
X Scanner hört nach der 25. Zeile auf Allgemeine Java-Themen 6
W RegEx Zeile parsen Medium Allgemeine Java-Themen 8
1 InputStream liest die letzte Zeile nicht ein Allgemeine Java-Themen 2
S String aus Datei-Zeile auslesen Allgemeine Java-Themen 6
C Zeile aus einer CSV-Datei löschen Allgemeine Java-Themen 3
FoolMoon Datei zeilenweise einlesen, aber nicht die erste Zeile! Allgemeine Java-Themen 3
neonfly Anzahl Zeichen pro Zeile auf der Konsole Allgemeine Java-Themen 8
H RandomAccessFile - Zeile finden Allgemeine Java-Themen 5
S readLine() liest nur jede 2. Zeile Allgemeine Java-Themen 3
P readLine() liest nur jede dritte Zeile? Allgemeine Java-Themen 3
G Zeile einfügen in TreeTable Allgemeine Java-Themen 2
M .txt Datei öffnen und jede Zeile mit festem String verketten Allgemeine Java-Themen 5
O Zeile eines Textfiles löschen Allgemeine Java-Themen 2
B in file immer 2. zeile überschreiben Allgemeine Java-Themen 8
J Text einer .csv Datei einlesen und Zeile in NEUE Zeile hänge Allgemeine Java-Themen 1
B Logs - txt-Datei neue Zeile anfuegen, neue Datei erstellen Allgemeine Java-Themen 6
S Zweidimensionales Array neue Zeile erzeugen Allgemeine Java-Themen 3
P Neue Zeile Plattformunabhängig Allgemeine Java-Themen 3
I Zeile überprüfen Allgemeine Java-Themen 12
P JTable selektierte Zeile mitwandern Allgemeine Java-Themen 2
Saxony Letzte Zeile eines Streames mit auslesen Allgemeine Java-Themen 4
H Notepad - Mitgabeparameter um in eine Zeile zu springen Allgemeine Java-Themen 15
M Funktion liest nach Textaus aus der vorigen Zeile Allgemeine Java-Themen 2
TheJavaKid Zeile auf existenz von String prüfen. Allgemeine Java-Themen 19
R Einzelne Zeile manipulieren Allgemeine Java-Themen 4
M Datei und Zeile im Code Allgemeine Java-Themen 2
J Matrix mit unterschiedlicher Anzahl von Spalten pro Zeile? Allgemeine Java-Themen 4
W gezielt eine Zeile einlesen? Allgemeine Java-Themen 6
byte Erste Zeile einer Textdatei entfernen Allgemeine Java-Themen 5
L JTable: Wenn Zeile markiert dann Meldung. geht nicht Allgemeine Java-Themen 4
V Class Document seltsam leere Zeile am Anfang Allgemeine Java-Themen 8
G String in String-Array umwandeln in einer Zeile? Allgemeine Java-Themen 2
OnDemand Excel lesen wie CSV Allgemeine Java-Themen 7
M Excel Datei Erstellen Allgemeine Java-Themen 2
I HTML / XHTML Seite nach Excel exportieren. Suche Lib Allgemeine Java-Themen 12
O Wie kann ich in Apache POI (Excel Dateien schreiben) Datumszellen in Excel erzeugen Allgemeine Java-Themen 6
N Apache POI/ neue Reihe in Excel mit einem Button Allgemeine Java-Themen 2
D ODS.Datei öffnet leider in Excel Allgemeine Java-Themen 3
L JavaFX JavaFX Chart in Apache Poi Excel Datei Allgemeine Java-Themen 2
G Excel File öffnen, in Zelle schreiben, abspeichern Allgemeine Java-Themen 6
G Excel Datum richtig auf der Konsole ausgeben Allgemeine Java-Themen 1
G Excel Tabelle lesen und in neue Excel Tabelle einfügen Allgemeine Java-Themen 11
Trèfle Excel-Datei nicht speicherbar, da von Java zum Bearbeiten gesperrt. Allgemeine Java-Themen 3
L Excel Datei löscht sich selbst im Programm - Java Allgemeine Java-Themen 3
C Aus MEHREREN Excel Tabellen bestimmte Zelle addieren Allgemeine Java-Themen 1
offi Excel mit Inhalten aus DB öffnen ohne zu speichern Allgemeine Java-Themen 8
C Zeilen-"Vektor" aus Excel-Tabelle suchen Allgemeine Java-Themen 0
R EXCEL Range und HSSF POI CellRangeAddress Allgemeine Java-Themen 1
J Apache POI Excel- Blattschutz aufheben Allgemeine Java-Themen 2
ms_cikar Java Excel bearbeiten spalten werden überschrieben. Allgemeine Java-Themen 4
T Geschlossen: Apache POI - Excel einlesen Allgemeine Java-Themen 0
U Java Excel export Allgemeine Java-Themen 1
M Excel Formel in Java Allgemeine Java-Themen 7
D Mit Hilfe von Java aus Excel-Sheet Zellen in neues Excel Dokument kopieren Allgemeine Java-Themen 3
A In Excel-Datei schreiben, Formeln der Mappe anwenden, Wert lesen Allgemeine Java-Themen 3
T Java Excel Drop Down Formularsteuerelement Allgemeine Java-Themen 0
C Benutzereingabe von EXCEL-Funktionen parsen Allgemeine Java-Themen 4
T Excel - mit jxf sprachabhängige Formeln schreiben Allgemeine Java-Themen 2
H Excel Datei einlesen mit Apache POI Allgemeine Java-Themen 1
J Ausgabe nach Excel Allgemeine Java-Themen 1
Todesbote Zeilen aus Excel in andere Excel Tabelle kopieren Allgemeine Java-Themen 0
Todesbote Excel Zellen umranden Allgemeine Java-Themen 1
Todesbote Excel Blattschutz aufheben und Daten einfügen Allgemeine Java-Themen 3
G Langtexte - Cellformat import in Excel Allgemeine Java-Themen 3
T Mit Apache Poi Daten aus einer Excel Tabelle kopieren und in Word einfügen Allgemeine Java-Themen 1
R Variablen per HSSF geheime Werte von JAVA an EXCEL Allgemeine Java-Themen 2
J excel einbinden Allgemeine Java-Themen 2
M Threads Excel files bearbeiten Allgemeine Java-Themen 4
S Java & Excel Allgemeine Java-Themen 4
R Datum in Excel Tabelle eintragen Allgemeine Java-Themen 6
C Java Excel Button Allgemeine Java-Themen 2
M Bilder aus Excel auslesen Allgemeine Java-Themen 6
A Excel nach bestimmten Inhalt durchsuchen Allgemeine Java-Themen 8

Ähnliche Java Themen

Neue Themen


Oben