Dateiformat ist bekannt,wie suche ich inExcelDatei

Hallo Wissende,
auf http://www.wotsit.org/ gibt es das Dateiformat vieler Dateiendungen,
so auch für Excel (Versionen 2 bis XP) als PDF (steht in einer zip)
http://www.wotsit.org/download.asp?f=excel
Ich durchblicke das nicht, wie kann ich mit diesem Wissen herausfinden ob eine Datei benutzerdefinierte Funktionen oder benutzerdefinierte Makros hat. Welches Byte, welche Bytes muss ich in der Datei suchen, an welcher Stelle.
Wer testen möchte, in Excel eine leere Datei abspeichern, dann in gleicher Datei ein Makro erzeugen (Extras–Makro–Makros–Aufzeichnen, dann irgendwas von a nach B kopieren, Aufzeihnung abbrechen, datei speichern.
So hat man eine.xls Datei mit und eine ohne Makros, wie kann ich das durch Bytesuche in den Dateien ermitteln, ob es da Makros gibt?
Suchen will und kann ich ich mit Excel-vba, ich weiss nur nicht nach was:frowning:
Vielen Dank
Reinhard

hallo.

schau dir mal abschnitt 5.4 „BOF - begin of file“ an. da steht drin, woran du ein worksheet, ein diagramm oder ein makro erkennst. du suchst dann bis zum zugehörigen EOF. danach kommt entweder ein neues BOF oder die datei is zu ende.
einverstanden?

gruß

michael

schau dir mal abschnitt 5.4 „BOF - begin of file“ an. da steht
drin, woran du ein worksheet, ein diagramm oder ein makro
erkennst. du suchst dann bis zum zugehörigen EOF. danach kommt
entweder ein neues BOF oder die datei is zu ende.
einverstanden?

Hallo Michael,
danke dir für deine Antwort.

Ich habe XL2000, d.h. gemäß Abschnitt 1.1 müßte mein BOF mit 0809 beginnen, dann 2 Bytes für die Version, dann 0006 für ein VisualBasicModule=Makrocode.
(0040 bezeichnet wohl ein Excel4-Makro, die standen damals auf einem Tabellenblatt)

Dem ist aber leider nicht so, habe mit einem Hexeeditor alles abgesucht nach 06, ich fand nichts wo da 4-5 Stellen davor 08 09 stand.
Mache ich was falsch?
Gruß
Reinhard

hallo.

Mache ich was falsch?

ja. siehe abschnitt 1.5: die daten werden im „little endian“ format abgelegt, d.g. wenn du 1234h finden willst, mußt du nach 3412h suchen.

nach 0908h kommt die record-größe. für BOF ist sie 16, also 10h. also 1000h.
dann erst kommen die daten. also version usw.

aber auch dann gibt’s noch ein problem: ich hab jetzt mal zwei files gemacht, jeweils mit einem tabellenblatt, in einem file zusätzlich ein makro.
es sind in beiden files nur die workbook globals (0500h) und ein worksheet (1000h).
der BOF vom visual basic modul fehlt irgendwie… ?

gruß

michael

Hallo Michael,
„little endian“, was es alles gibt :smile:
Danke dir auch für diese Mühe mir das zu erklären.

aber auch dann gibt’s noch ein problem: ich hab jetzt mal zwei
files gemacht, jeweils mit einem tabellenblatt, in einem file
zusätzlich ein makro.
es sind in beiden files nur die workbook globals (0500h) und
ein worksheet (1000h).
der BOF vom visual basic modul fehlt irgendwie… ?

*seufz* hatte schon wieder Hoffnung geschöpft.
Vielleicht hast du ja noch Erfolg, *hoff*
Danke dir
Reinhard

*seufz* hatte schon wieder Hoffnung geschöpft.
Vielleicht hast du ja noch Erfolg, *hoff*
Danke dir

nix zu danken.
heut hab ich leider keine zeit mehr dafür, aber bei gelegenheit werd ich mir das wohl nochmal anschauen. vielleicht gibt’s entgegen der beschreibung bei biff8 ja doch verschachtelte records…?
wenn du vor mir noch was rausfindest, laß es mich wissen :smile:

gruß

michael

VB-Beispiel in VBA-Code umwandeln

heut hab ich leider keine zeit mehr dafür, aber bei
gelegenheit werd ich mir das wohl nochmal anschauen.
vielleicht gibt’s entgegen der beschreibung bei biff8 ja doch
verschachtelte records…?
wenn du vor mir noch was rausfindest, laß es mich wissen :smile:

Hallo Michael,
in den vielen Antworten bei:
http://groups.google.de/groups?num=50&hl=de&lr=&neww…
stiess ich auf:
http://groups.google.de/groups?hl=de&lr=&newwindow=1…
wo auf eine dsofile.dll hingewiesen wird die man sich samt VB-Beipiel bei:
http://support.microsoft.com/?scid=kb;en-us;Q224351
herunterladen kann.
Das habe ich getan, damit kann man wohl ein „HasMacros“-Flag in Excel- und Worddateien abfragen.
Leider kann ich VBA nicht so gut um mir das VB-Beispiel umzustricken:frowning:
Gruß
Reinhard

Hallo Michael,
mit bof biff gbs nix neues.
Aber ich hab die VBA Lösung gefunden/bekommen *freu* um das Problem zu lösen, also um herauszufinden, ob eine in excel ungeöffnete excel-Datei Makros hat.
Hintergrund war, 1000 Dateien zu checken, da ist Datei öffnen, Codezeilen zählen (Option explicit) echt langsam.
Zum Ablauf musst du die dsofile.dll einbinden, gibts bei MS, aber kann dir auch den downloadlink nennen.
Gruß
Reinhard

 Public Sub lesen()
 Dim myFileSystemObject As FileSystemObject, myFile As File, lngRow As Long
 Dim objFilePropReader As DSOleFile.PropertyReader
 Dim objDocProp As DSOleFile.DocumentProperties
 Application.ScreenUpdating = False
 Set objFilePropReader = New DSOleFile.PropertyReader
 Set myFileSystemObject = New FileSystemObject
 lngRow = 2
 With Worksheets("Archiv")
 .Range(.Cells(2, 1), .Cells(Rows.Count, 256)).ClearContents
 For Each myFile In myFileSystemObject.GetFolder("D:\Eigene Dateien\Testordner\").Files
 Set objDocProp = objFilePropReader.GetDocumentProperties(myFile.Path)
 .Cells(lngRow, 1) = myFile.Name
 .Cells(lngRow, 2) = myFile.Type
 .Cells(lngRow, 5) = myFile.DateCreated
 .Cells(lngRow, 7) = objDocProp.Comments
 .Cells(lngRow, 11) = objDocProp.Subject
 .Cells(lngRow, 12) = objDocProp.Category
 .Cells(lngRow, 13) = objDocProp.HasMacros
 lngRow = lngRow + 1
 Next
 .Cells(lngRow + 9, 1) = "Historie:"
 End With
 Set objFilePropReader = Nothing
 Set objDocProp = Nothing
 Set myFileSystemObject = Nothing
 Application.ScreenUpdating = True
 End Sub

hallo reinhard.

dann is ja gut :smile: mich würde jetzt aber trotzdem interessieren, wo die dll das „hasmacros“ flag herkriegt. werd mir das bei gelegenheit mal zu gemüte führen.

gruß

michael

dann is ja gut :smile: mich würde jetzt aber trotzdem
interessieren, wo die dll das „hasmacros“ flag herkriegt. werd
mir das bei gelegenheit mal zu gemüte führen.

Hallo Michael,
ja, verstehe ich. Ich grüble auch noch, warum das mit BOF nicht funktioniert. Und warum, wenn man ein Modul einfügt, kleines makro schreibt, die Datei gleich um 1000 Bytes wächst?!.
Schreibt man das Makro in „DieseArbeitsmappe“ nur um 500 Bytes,
Die Zahlen waren jetzt aus der Erinnerung, kommen aber hin,
Die BOF-Beschreibung stimmt bestimmt, warum dann so Bytesverschwendung.
Seltsam.
Gruß
REinhard