# POI/HSSF tutorial



## Guest (4. Feb 2009)

Hallo

kann mir jemand ein gutes POI und oder HSSF Tutorial geben? Möglichst auf Deutsch. Ich muss so ne Excel Tabelle einlesen und in ner TXT Datei wieder ausgeben. Jedoch bringt es mir nichts wenn ich mir hier jetzt vorschreiben lasse wies genau geht und dann nichts dabei lerne, da ich dieses noch erweitern werden muss .... 
Es sollte schon möglichst genau und sogar für nen vollidioten wie mich verständlich erklärt sein.
Schonmal im voraus Danke für die Hilfe.


----------



## ARadauer (4. Feb 2009)

ist zwar nicht auf deutsch... aber naja New Workbook, wird wohl zu verstehen sein...

http://poi.apache.org/spreadsheet/quick-guide.html

ich finde das ist einer der besten quick guides die ich kenne, man ließt sich das durch und kann das teil benutzen. so solls sein... kenn apache projekte, wo man auf der homepage herum surft und nach 15 minuten noch immer nicht wozu das zeug gebraucht wird.....


----------



## Guest (5. Feb 2009)

Danke für den Post, aber folgendes habe ich dort gefunden:

Reading and Rewriting Workbooks



```
InputStream inp = new FileInputStream("workbook.xls");
    //InputStream inp = new FileInputStream("workbook.xlsx");

    Workbook wb = WorkbookFactory.create(inp);
    Sheet sheet = wb.getSheetAt(0);
    Row row = sheet.getRow(2);
    Cell cell = row.getCell(3);
    if (cell == null)
        cell = row.createCell(3);
    cell.setCellType(Cell.CELL_TYPE_STRING);
    cell.setCellValue("a test");

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

Erstens streicht er mir folgende Sachen Rot an:
Workbook
Sheet
Row
Cell

Des weiteren Steht da vielleicht alles was ich brauche, aber das ist für mich kein Tutorial da nicht beschrieben ist wie es funktioniert sodas ich es auf mein Programm anpassen kann und ich muss ja irgendwie den Pfad angeben und das sehe ich da auch nicht... Ich sagte ja bereits ich bräuchte nen Tutorial das selbst nen Vollidiot wie ich versteht ...

Kann mir bitte noch jemand eines Posten oder versuchen es mir zu erklären?

Des weiteren ich muss das Excel Sheet Lesen können und dann in eine TXT Datei die Daten aus dem Excel Sheet einfügen. Das was ich gefunden habe Liest zwar die Daten, verändert aber nur das Sheet und Speichert es in einem neuen Sheet oder im alten ka.


----------



## Guest (5. Feb 2009)

Anonymous hat gesagt.:
			
		

> Erstens streicht er mir folgende Sachen Rot an:
> Workbook
> Sheet
> Row
> Cell


Fehlender Import. Evtl. auch lib nicht mit eingebunden.

```
InputStream inp = new FileInputStream("workbook.xls");
```
sollte klar sein

```
Workbook wb = WorkbookFactory.create(inp);
    Sheet sheet = wb.getSheetAt(0);
    Row row = sheet.getRow(2);
    Cell cell = row.getCell(3);
```
Erstellen des Workbooks (quasi die excel-datei auf Java-Seite),
hol dir das erste Arbeitsplatte,
passende row /cell-Kombination.

```
if (cell == null)
        cell = row.createCell(3);
```
gibts die Zelle nicht (kein Wert drin), erstelle sie.

```
cell.setCellType(Cell.CELL_TYPE_STRING);
    cell.setCellValue("a test");
```
Typ der Zelle nun String (kein Datum, keine Währung..kein was-weiss-ich)

```
// Write the output to a file
    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
    wb.write(fileOut);
    fileOut.close();
```
Rausschreiben.
Ich weiß nun nicht, wie das mit den FileStreams ist, aber evtl. musst du den lesenden nochmal schließen, bevor du schreibst. Das würde dir aber auch eine IOException mitteilen.


----------



## Gast (5. Feb 2009)

Mist, noch immer kein Account 
Nachtrag: Das mit den FileStreams beziehe ich darauf, wenn es um eine Datei geht, von der gelesen und in die danach geschrieben wird.


----------



## ARadauer (5. Feb 2009)

wenn ich ein tutorial über hssf will, kann ich nicht erwarten, dass mir das erklärt, wie ich eine lib verwende....



> Erstens streicht er mir folgende Sachen Rot an:


alter! ein fehler wäre interessant....

hast du das jar in deinen classpath eingebunden?

ftp://gd.tuwien.ac.at/pub/infosys/s...oi/release/bin/poi-bin-3.2-FINAL-20081019.zip

da drin gibts eine jar die musst du einbinden.
verwendest du eclipse? wie du in eclipse eine jar einbindest.. da findest du sicher 100 tutorials im netz


----------



## paldawin (5. Feb 2009)

Schon mal jexcelapi versucht?

http://jexcelapi.sourceforge.net/


----------



## Gast (5. Feb 2009)

>verwendest du eclipse? wie du in eclipse eine jar einbindest.. da findest du sicher 100 tutorials im netz

Ich denke mir, dass er das wissen sollte bevor er auf solche Ideen kommt. Aber leider: Alles schon gehabt 
Denke mal, dass es nach dem Einbinden der Lib bzw. den richtigen Imports laufen sollte. Außerdem hab ich ja schon alles oben vorgekaut, da kann eigentlich keine Frage mehr kommen *hoff*


----------



## Guest (5. Feb 2009)

Also Danke schonmal für den post. Mir ist noch unklar wie ich die Datei die ich bearbeiten will aufrufe. Also ich erwarte da die ganze Zeit sowas wie wenn ich eine Datei Lade das da son Dialog kommt wie beim Speichern.  

Bezüglich des ersten Punkts weis ich leider nicht was gemeint ist sorry bin halt noch total der Noob in Java  (und muss trotzdem nen Riesen Programm in kürze fertig haben  ) 
Beziehe mich auf das hier:


```
InputStream inp = new FileInputStream("workbook.xls");
```


Also die Lib sollte eingebunden sein das heist im Tree von Eclipse habe ich sie drin aber ob ich die nochmal in den Code selbst irgendwie einbinden muss weis ich nicht. Ansonsten den Import habe ich gemacht. 
Das der Import


```
import org.apache.poi.*;
```


----------



## Guest (5. Feb 2009)

Das die Fehlermeldung die bei jedem Rot unterstrichenen steht:



> Workbook cannot be resolved to a type


----------



## Guest (5. Feb 2009)

Ich meine was kann ich denn dafür das ich in meiner Ausbildung Java nicht richtig beigebracht bekommen habe d.h. ich habe zwar viel darüber gelernt aber nicht wie mans anwendet. Jetzt muss ich für das Ende meiner Ausbildung ein Projekt in Java machen was als mein Abschlussprojekt gilt. Es ist zu spät sich was anderes auszusuchen... und in anderen Programmiersprachen bin ich auch nicht unbedingt besser auser vielleicht in Cobol.


----------



## ARadauer (5. Feb 2009)

nicht jammern, jar einbinden...



> Also ich erwarte da die ganze Zeit sowas wie wenn ich eine Datei Lade das da son Dialog kommt wie beim Speichern.


was dialog? welcher dialog? das hat ja mit excel deatei lesen und schreiben nix zu tun...


----------



## ARadauer (5. Feb 2009)

http://fuzzyide.htw-dresden.de/Docu...nshots/todo-pictures/Bilder_3.2/Libraries.jpg


----------



## Guest (5. Feb 2009)

Wiso hat das mit Excel Datei Lese nichts zu tun? Ich muss meinem Programm doch erstmal sagen welche Excel Datei ich haben will oder? 

Was haltet ihr von der Idee wenn ich mir nächste woche Urlaub nehme und zum eigenen verständnis dann das gesammte Java ist auch nur eine Insel 7 Buch durchlese? Meint ihr das würde mir helfen?


----------



## Guest (5. Feb 2009)

Ja die Jar ist dort eingebunden.


----------



## Gasthelfer (5. Feb 2009)

Du machst doch durch den InputStream einen festen Verweis auf eine Datei (das sollteste zum frühen Entwickeln / Testen auch so lassen). JavaInsel nicht "durchlesen" sondern dir genau überlegen was du machen willst und gezielt nachschlagen. Mach dir eine Stichwort- und "Milestone"-Liste. Was willst du erreichen und wie. Reicht es evtl. aus erstmal mit einem statischen Dateiverweis (wie es jetzt ist) auf Konsolenbasis (ausgabe) zu Arbeiten? Oder willst du Excel2.0 machen (würde ich dir mit deinem Vorwissen nicht empfehlen)


----------



## Guest (5. Feb 2009)

Also erstmal zur Datei einlesen. Ich müsste dann im prinzip so den Pfad angeben? 


```
InputStream inp = new FileInputStream("C:/Dokumente und Einstellungen/Name/Eigene Dateien/Mein Name/bla.xls");
```

Ok wo kann ich das nachschlagen? Im Internet finde ich nur nicht verständliche Tutorials. Für mich steht fest das ich bis morgen Abend eine Excel Datei einlesen können muss (erstmal nur eine Zelle) und diese in einem TXT File ausgeben können muss. Dieses Ziel muss erreicht werden über POI (HSSF). 

Hm ja ich denke für den anfang wäre es einfacher das ausgelesene auf der Console auszugeben und danach dann in ein TXT File zu schreiben. 

Nächster Punkt was ist Excel2.0?


----------



## ARadauer (5. Feb 2009)

> Wiso hat das mit Excel Datei Lese nichts zu tun? Ich muss meinem Programm doch erstmal sagen welche Excel Datei ich haben will oder?


aber der biblothek zum lesen einer excel datei, ist das doch egal wo die datei herkommt, bzw wie du zu dem filestream kommst...

http://java.sun.com/docs/books/tutorial/uiswing/components/filechooser.html


----------



## Guest (5. Feb 2009)

Ehm wegen dem Datei einlesen war das was ich zuletzt gepostet habe jetzt eigentlich korrekt? Und meine anderen Fragen habe ich auch noch keine Antwort drauf bekommen. 



> Ok wo kann ich das nachschlagen?





> Nächster Punkt was ist Excel2.0?


----------



## ARadauer (5. Feb 2009)

ok... wo genau liegt jetzt das problem?


----------



## Guest (5. Feb 2009)

egal ich gebs auf also dann halt beim nächsten problem meld ich mich wieder ... wird bestimmt schon bald sein hoffe nur das mir mein kollege mal zeit findet um mir das jetzt zu proggen


----------



## ARadauer (5. Feb 2009)

tja die jugend von heute... keinen ergeiz


----------



## Guest (5. Feb 2009)

wenn ichs einfach nicht raff? was bringt mir dann immer und immer wieder die gleichen fragen zu stellen und es dann doch sowiso nicht zu verstehen bzw. nicht das zu bekommen was ich brauche


----------



## ARadauer (5. Feb 2009)

Anonymous hat gesagt.:
			
		

> wenn ichs einfach nicht raff? was bringt mir dann immer und immer wieder die gleichen fragen zu stellen und es dann doch sowiso nicht zu verstehen bzw. nicht das zu bekommen was ich brauche


welche Fragen? wo man ein hssf tut findet? ja auf der apache seite...



> Ich müsste dann im prinzip so den Pfad angeben?


mhn ja



> Ok wo kann ich das nachschlagen?


was nachschlagen? du bist zu unspezifisch, keiner weiß was dein problem ist...

du willst einen excel datei lesen und als csv schreiben?


```
package main.java;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;

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

public class Xls2Csv {
   
   public static void main(String[] args) throws IOException {
      InputStream inp = new FileInputStream("c:/in.xls"); 

      HSSFWorkbook wb =  new HSSFWorkbook(inp);
       HSSFSheet sheet = wb.getSheetAt(0);
      
      ArrayList<String> output = new ArrayList<String>();
      
      for (Iterator<HSSFRow> rit = (Iterator<HSSFRow>)sheet.rowIterator(); rit.hasNext(); ) {
         HSSFRow row = rit.next();
         StringBuffer outputRow = new StringBuffer();
         for (Iterator<HSSFCell> cit = (Iterator<HSSFCell>)row.cellIterator(); cit.hasNext(); ) {
            HSSFCell cell = cit.next();
            outputRow.append(cell.getStringCellValue());
            outputRow.append(";");
         }
         output.add(outputRow.toString());
      }
      
      BufferedWriter writer = new BufferedWriter(new FileWriter(new File("c:/out.csv")));
      
      for(String s: output) {
         writer.write(s);
         writer.newLine();
      }
      writer.flush();
      writer.close();

   }

}
```

wobei ich jetzt zugeben muss, das der quick start guide nicht mehr das ist was er mal war... die idioten haben da einiges von version 3 auf 4 verhunzt...


----------



## Guest (5. Feb 2009)

habe das problem jetzt mit hilfe meines kollegen lösen können war aber schon auf dem richtigen weg fehlten nurnoch ein paar kleinigkeiten
thx für die hilfe


----------



## JavaNooby (14. Jan 2010)

Gar nicht schlecht das Excel Ding.

Ich hab nur ein kleines Problem. Gibs da irgendwie ne möglichkeit so ein HssfSheet zu drucken?

Ich hab schon rumgesucht aber leider nichts gefunden . In der Api finde ich leider auch nichts dazu ;(



Vielen Dank


----------

