Zum Inhalt springen

XLT-Datei einlesen und beschreiben


IggeB

Empfohlene Beiträge

Hallo Leute,

ich sitze verzweifelt seit Tagen an einer Programmieraufgabe und bin inzwischen nicht mehr sicher, ob es überhaupt möglich ist diese zu realisieren.

Meine Aufgabe besteht darin, eine XLT-Datei mit Makros, bestehend aus 3 Sheets einzulesen und auf dem 3 Sheet Daten einzutragen. Ich habe bereits versucht die Datei mit dem normalen File-Reader einzulesen, was jedoch nicht funktioniert hat...Desweiteren versuchte ich die Datei in csv-Format umzuschreiben, was auch klappte, jedoch Probleme bei der Zurückumwandlung in XLT brachte.

Habt ihr eine Idee, wie ich da vorgehen könnte?

Ich würde mich über eure Hilfe sehr freuen!

MfG

Igge

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich kenn mich zwar mit Microsoft-Formaten ganz und gar nicht aus, aber es könnte sein, dass dir der FileReader verschiedene Zeichen (besonders bei binärformaten) einfach verschluckt. Versuch doch mal die Datei mit nem FileInputStream zu lesen (und später mit FileOutputStream zu schreiben).

Link zu diesem Kommentar
Auf anderen Seiten teilen

danke für eure Antworten.

so, ich habe mich jetzt mal an dem FileInputStream ausprobiert.

Dieser liest die Datei ein, liefert mir jedoch nur unzählige zahlenwerte von 0-255.

Wie kann ich jetzt die XLT-Datei dementsprechend beschreiben?

Ich muss sagen, dass ich Neuling bin und mich noch nicht so gut mit den Werkzeugen auskenne.

Gruß Igge

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Zahlenwerte kannst du auf chars casten und zu Strings zusammenfügen.

Damit liest du einfach nur die Datei Byte für Byte ein (aus Performancegründen solltest du aber der read-Methode ein Byte-Array übergeben).

Hier mal nen Beispielcode:


		try {

			FileInputStream in = new FileInputStream(sourceFile);


			byte [] bytes = new byte[1024];

			int readBytes;


			while((readBytes = in.read(bytes)) != -1){

				System.out.println(new String(bytes,0,readBytes));

			}


			in.close();

		} catch (FileNotFoundException e) {

			e.printStackTrace();

		} catch (IOException e){

			e.printStackTrace();

		}

Bearbeitet von speedi
Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke für die Antworten.

@Speedi: Ich habe deinen Code mal ausprobiert. Die Ausgabe ist dann aber immer noch fehlerhaft. Es werden zwar einzelne Wörter dargestellt, aber größtenteils sieht man Fragezeichen oder kryptische Symbole. Es ist glaub ich das gleiche Resultat wie mit dem klassischen FileReader. Habt ihr ne Ahnung, woran das liegt?

Gruß Ingmar

Link zu diesem Kommentar
Auf anderen Seiten teilen

Jetzt vielleicht nochmal mit einfachen Worten. Das Office Format ist ein Binär Format entweder liest du dich in die Spezifikation (was bei Microsoft Office schwer werden dürfte) ein und schreibst dir selbst deinen Interpreter. Oder du nutzt einen bereits vorhanden, z.B. den den ich dir weiter oben gezeigt habe.

Der die FileReader oder InputStream stellen dir die Dateien so zur Verfügung wie sie auf dem Filesystem abgelegt sind. Sie machen nicht mehr und nicht weniger. Wenn eine Datei Binär abgelegt wird dann musst du dich um das übersetzen kümmern. Es sei denn du kannst direkt etwas mit dem Binär Strom anfangen.

Wenn du eine Office Datei mal mit einem Editor also nicht mir den Office Programmen öffnest dann solltest du das gleiche sehen wie in deinem Java Programm.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Diese kryptischen Zeichen sich binärwerte denen im Zeichensatz (vermutlich wirds mit ASCII angezeigt), kein Zeichen zugeordnet ist.

Dabei könnte es sich z.B. um die Position von Textfeldern handeln die binär abgelegt wurden. Also nicht als einfache Zahl im klartext geschrieben sondern als das was sie für den rechner sind: 4 Bytes.

Die Aufgabe, die du da hast ist leider alles andere als einfach, aber wenn du in die Zellen, wo du etwas eintragen musst einen Platzhalter reinsetzt und dann in der Datei nach genau diesen Platzhalter suchst könnte es so funktionieren. Denn dann musst du ja nichts an der Datei an sich ändern, sondern nur an bekannter stelle etwas bekanntes einfügen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

also ich versuche jetzt die Datei mit FileInputStream und FileOutputStream zu bearbeiten.

Zuerst habe ich mir die Datei komplett in eine neue Datei gespeichert und möchte nun noch zusätzliche Zeilen hinzufügen. Das Kopieren der Datei klappt einwandfrei, nur die Zeichen, die ich hinzufügen möchte sind nirgends zu sehen. WOran liegt das?

Mein Code sieht so aus:

public class test2 {

public static void main(String[] args) {

try{

File file=new File("Formblatt-Vorlage-Hydrogenics.XLT");

byte[] array=new byte[1024];

String test = "an das Ende der Datei, bitte";

int readBytes;

FileInputStream fis = new FileInputStream(file);

FileOutputStream fos = new FileOutputStream("new.XLT");

while((readBytes = fis.read(array)) != -1){

fos.write(array, 0, readBytes);

}

fos.write(test.getBytes());

fis.close();

fos.close();

System.out.println(file.length());

}

catch(FileNotFoundException e1){

e1.printStackTrace();

System.out.println("Fehler");

}

catch(IOException e2){

e2.printStackTrace();

}

}

}

Danke für eure Hilfe!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Liest du die Beiträge hier auch?

Öffne deine xlt Datei mal mit einem Editor da sollte dein Satz am Ende der Datei stehen. Wieso es im Excel nicht angezeigt wird liegt darin weil Excel diese Zeichen ignoriert. Denn die Excel Datei hat einen bestimmten Aufbau hier werden an spezieller Stelle spezielle Daten/Zeichen erwartet. Wenn du nun irgendwo Zeichen einfügst kann es passieren das es keine valide Excel Datei mehr ist und diese nicht angezeigt wird. Bei dir schein es so zu sein als würden die Zeichen einfach ignoriert werden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Kennt sich von euch einer mit Poi Apache aus?

Habe mir mal die Sachen runtergeladen, und die .jar- Dateien in mein Projekt geladen.

Jedoch findet der einige Methoden nicht, die eigentlich im Paket drin sein sollten...also ich habe mir ein paar Beispiel-Files auf der Homepage mal angeschaut und sie versucht bei mir auszuführen. Beispieslweise ist die Methode write für die Klasse Workbook nicht bekannt.

Meint ihr ich habe irgendwas vergessen einzufügen oder ist beim Entpacken was schief gegangen?

Danke für die Hilfe!

Link zu diesem Kommentar
Auf anderen Seiten teilen

so das Beschreiben der Datei klappt jetzt dank POI Apache :)

Jedoch gibt es noch ein kleines Problem...die Zahlen, die ich in die Tabelle schreibe werden in Excel nicht als solche erkannt. Wenn ich auf eine Zahl klicke, erscheint sie oben in dieser Form: '1.453, also mit so einem Hochkommata vorne. Meine erste Vermutung war, dass das daran liegt, dass die Zahlen als String gespeichert werden cell.setCellType(Cell.CELL_TYPE_STRING);

danach habe ich das gleiche mal mit CELL_TYPE_NUMERIC probiert, da kam jedoch wieder das gleiche heraus.

Hat einer von euch ne Idee, woran das liegen könnte?

MfG

Link zu diesem Kommentar
Auf anderen Seiten teilen

Was übergibst du denn der Zelle? Bzw von welchem Typ ist der Werte denn du in die Methode setCellValue schreibst? Denn je nachdem welche Methode du verwendest wird der CellType geändert.


cell.setCellType(Cell.CELL_TYPE_STRING);

//CellType wird auf CELL_TYPE_FORMULA gesetzt

cell.setCellValue((double)2.0);


cell.setCellType(Cell.CELL_TYPE_FORMULA);

//jetzt wird der CellType auf CELL_TYPE_STRING gesetzt

cell.setCellValue("2.0");

http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/Cell.html#setCellValue(java.lang.String)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...