Forum: PC-Programmierung MS Office Dateitypen am Inhalt unterscheiden


von Vlad T. (vlad_tepesch)


Lesenswert?

Hallo,
Ich suche einen Weg die (Binär-) Dateitypen von MS-Office zu erkennen, 
ohne auf die Dateiendung zurückzugreifen.

Hintergrund ist, dass mein Lieblingsdiff-Tool die Dateien an ihrer 
Endung erkennt, das Versionsverwaltungstool aber Dateien als *.tmp 
generiert.

Meine Idee ist nun, eine Art Proxy-Programm zu schreiben, was den 
Dateityp erkennt und die Temp-Dateien kopiert/umbennt in eine Datei mit 
der richtigen Endung, dann das Diff-Tool aufruft und nach dessen Beenden 
die Dateien wieder löscht.


Das Problem ist, dass die Office-Files keine (unterschiedlichen) 
Magic-Bytes zu haben scheinen.
DOC und XLS (um die geht es mir hauptsächlichst) fangen mit der 
Hex-Sequenz d0cf11e0a1b11ae100 an.

Die Formate scheinen eine Art Containerformat zu sein.

Leider fehlt mir die Zeit mich durch 350-seitige Format-Spezifikationen 
zu arbeiten und hoffe jemand von euch, hat sowas schon gemacht und hat 
einen guten link auf eine Erklärung oder sogar Implementierung der 
Auswertung dieses Containers.

MfG,
Vlad

von Grrrr (Gast)


Lesenswert?

Vlad Tepesch schrieb:
> das Versionsverwaltungstool aber Dateien als *.tmp
> generiert.

Wo gibt es denn sowas? Schmeiss es weg und nimm was Vernünftiges.

von Vlad T. (vlad_tepesch)


Lesenswert?

Grrrr schrieb:
> Wo gibt es denn sowas? Schmeiss es weg und nimm was Vernünftiges.

Wenn du wüsstest, wie oft ich dass schon gedacht, oder gesagt habe.
Leider treffe ich solche Entscheidungen nicht.

von office (Gast)


Lesenswert?

schau dir doch einfach die Dateien im Notepad/hex Editor an, da wirst du 
feststellen, dass der Anfang/Header immer gleich ist (zumindest bei ein 
und der selben Version)

von Vlad T. (vlad_tepesch)


Lesenswert?

office schrieb:
> schau dir doch einfach die Dateien im Notepad/hex Editor an, da wirst du
> feststellen, dass der Anfang/Header immer gleich ist (zumindest bei ein
> und der selben Version)

wie gesagt:
doc und xls sind beide gleich, dort wo die Unterschiede beginnen, 
unterscheiden sich auch verschiedene Excelfiles.

von uart (Gast)


Lesenswert?

Vlad Tepesch schrieb:
> doc und xls sind beide gleich, dort wo die Unterschiede beginnen,
> unterscheiden sich auch verschiedene Excelfiles.

dann schau dir eben das Ende an, da steht dann z.B. "Microsoft 
Word-Dokument
   MSWordDoc    Word.Document.8 ô9²q  "

von Peter (Gast)


Lesenswert?

am ende in der Datei steht doch was von "Microsoft Office Word-Dokumen" 
bzw bei Excel was von "Workbook".

von Vlad T. (vlad_tepesch)


Lesenswert?

uart schrieb:
> dann schau dir eben das Ende an, da steht dann z.B. "Microsoft
> Word-Dokument
>    MSWordDoc    Word.Document.8 ô9²q  "

Peter schrieb:
> am ende in der Datei steht doch was von "Microsoft Office Word-Dokumen"

hmm, das kann ich irgendwie nicht bestätigen.


Peter schrieb:
> bzw bei Excel was von "Workbook".
das scheint zu stimmen, allerdings scheint der Ort variabel, aber das 
wäre immerhin ein anhaltspunkt

von Hilfs-Sysop (Gast)


Lesenswert?

Beide Formate sind sehr ähnlich, da Word+Excel IIRC beim Speichern nur 
ihre internen OLE-Objekte serialisieren und auf die Platte bannen.

selbst "file" kann die nicht unterscheiden, und erkennt nur ein 
"application/vnd.ms-office"...

vielleicht kann dir die "wv2"-Library weiterhelfen,
http://wvware.sourceforge.net/
http://sourceforge.net/projects/wvware/

von Albrecht H. (alieninside)


Lesenswert?

Vlad Tepesch schrieb:
> ...
>
> Leider fehlt mir die Zeit mich durch 350-seitige Format-Spezifikationen
> zu arbeiten

Ging mir vor einigen Jahren auch so, habs dann auch sein lassen, weils 
nicht so wichtig war, (wollte händisch ein .xls erstellen, das ging aber 
auch einfacher). Aber tatsächlich steht oder stand in der 
Format-Spezifikation drin, wie man durch das Auslesen von einigen über 
Zeiger verketteten Bytes sämtliche Informationen über das Dokument 
erhält, wenn mich nicht alles täuscht waren sogar ein paar Zeilen C++ 
Quellcode dabei.

> und hoffe jemand von euch, hat sowas schon gemacht und hat
> einen guten link auf eine Erklärung oder sogar Implementierung der
> Auswertung dieses Containers.
>

Heute würde ich wahrscheinlich versuchen es mit VB.net oder C# zu 
machen, also einen Verweis auf das installierte Office setzen, da wirds 
dann schon irgend ein Objekt mit einer Property geben aus dem man die 
gewünschten Informationen auslesen kann.
>
>

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.