Dateieigenschaften /Titel, Thema,...) von Office 2007ff lesen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,
ich habe bisher problemlos die Dateieigenschaften (Titel, Thema, Autor, ...) von Office-Dateien mit DsoFile.dll ausgelesen. Die DLL hatte folgende Vorteile:
Nach längerem, erfolglosen Suchen nach einer besseren Möglichkeit lese ich jetzt docx, dotx und Co über OLE-Automation, d.h. je nach Dokument über TWordapplication, TExcelApplication, TPowerpointapplication ein. Der Code
Delphi-Quellcode:
Das funktioniert zwar und lässt sicher auch noch ein etwas besseres Fehlerhandling zu, hat aber trotzdem folgende Nachteile:
type
TProp = record bLoad : Boolean; FTitel : String; FThema : String; FAutor : String; FGroesse : Int64; FAendDat : TDateTime; bAttachment : Boolean; iAttachment : Integer; Body : String; Header : String; end; ... function TuProp.GetDocumentPropertiesXML(sFile: WideString): TProp; Var waWord : TWordApplication; eaExcel : TExcelApplication; paPowerPoint : TPowerpointApplication; VarBool, VarName, VarVar : OleVariant; i : integer; sExt : String; iTyp : Byte; iID : Integer; begin VarName := sFile; sExt:= Lowercase(Sysutils.ExtractFileExt(VarName)); if (pos('.docx', sExt) = 1) or (pos('.dotx', sExt) = 1) then iTyp := 1 else if (pos('.xlsx', sExt) = 1) or (pos('.xltx', sExt) = 1) then iTyp := 2 else if (pos('.pptx', sExt) = 1) or (pos('.ppsx', sExt) = 1) then iTyp := 3; Result.bLoad := false; try case iTyp of 1: begin waWord := TWordApplication.Create(nil); waWord.Connect; waWord.Documents.OpenOld(VarNAme,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam); // Vorgegebene Properties lesen VarVar := waWord.ActiveDocument.BuiltInDocumentProperties; end; 2: begin eaExcel := TExcelApplication.Create(nil); eaExcel.Connect; eaExcel.Workbooks.Open(VarNAme, EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam, iID); // Vorgegebene Properties lesen VarVar := eaExcel.ActiveWorkBook.BuiltInDocumentProperties; end; 3: begin paPowerpoint := TPowerpointApplication.Create(nil); paPowerpoint.Connect; paPowerpoint.Presentations.OpenOld(VarNAme,EmptyParam,EmptyParam,EmptyParam); // Vorgegebene Properties lesen VarVar := paPowerpoint.ActivePresentation.BuiltInDocumentProperties; end; end; Result.FTitel := VarVar.Item[wdPropertyTitle]; Result.FThema := VarVar.Item[wdPropertySubject]; Result.FAutor :=VarVar.Item[wdPropertyAuthor]; Result.bLoad := true; finally VarBool := False; case iTyp of 1: begin waWord.ActiveDocument.Close(VarBool,EmptyParam,EmptyParam); waWord.Quit; waWord.Disconnect; waWord.Free; end; 2: begin eaExcel.ActiveWorkBook.Close(VarBool,EmptyParam,EmptyParam, iID); eaExcel.Quit; eaExcel.Disconnect; eaExcel.Free; end; 3: begin paPowerpoint.ActivePresentation.Close; paPowerpoint.Quit; paPowerpoint.Disconnect; paPowerpoint.Free; end; end; end; end;
Hat jemand einen anderen, brauchbareren Weg um die Dateieigenschaften von Office2007 und später auszulesen? Die in verschiedenen Foren erwähnte Lösung http://www.entwickler-ecke.de/topic_...n_25452,0.html funktioniert mit neueren Office-Formaten auch nicht. Tests wurden durchgeführt auf
Vielen Dank Gerd |
AW: Dateieigenschaften /Titel, Thema,...) von Office 2007ff lesen
Es gibt eine neuere Version von dsofile auf der Microsoft Webseite. Damit funktioniert es bei mir mit Office 2010.
Gruß Kompi |
AW: Dateieigenschaften /Titel, Thema,...) von Office 2007ff lesen
Hallo kompi,
ich habe schon einige Versionen von DsoFile.dll runtergeladen. Auch 64-bit-Versionen. Das Problem blieb immer dasselbe. Auch die Aussagen diesbezüglich sind nicht ganz klar. Die einen sagen, es liegt an der Inkompatibilität 32/64-bit, andere an dem neuen Aufbau der Filestruktur seit Office 2007. Ich denke auch, dass es eher an letzterem liegt. Kannst du mir die DsoFile.dll anhängen oder den Link geben? Danke Gerd |
AW: Dateieigenschaften /Titel, Thema,...) von Office 2007ff lesen
Hallo norwegen60,
hier ist der Link:http://www.microsoft.com/en-us/downl...s.aspx?id=8422 Unter Details findet man die Information, dass dsofile nun auch für das Officeformat ab 2007 funktioniert. Ich selber habe dies zwar nicht mit Delphi ausprobiert, aber unter Excel mit VBA. Hier habe ich die Informationen von Word - Dateien (docx und docm) ausgelesen. Funktioniert seit längerem problemlos. Gruß Kompi. |
AW: Dateieigenschaften /Titel, Thema,...) von Office 2007ff lesen
Hallo,
ich habe mal diverse Versuche mit der DsoFile-Version gemacht, die du genannt hast. Es ist übrigens die Version, die ich auch schon verwendet habe. Ich habe die beiden Demoversionen FilePropDemoVB7 und ..VB7 getestet. In meinem Original Win7-64 mit installiertem Office2003 habe ich es nach einigen Versuchen geschafft, dass beide Tetsversionen sowohl DOC als auch DOCX gelesen haben. Leider hat danach meine in ein Delphiprogramm installierte Version nicht mehr funktioniert. Da die Tests der VB-Programme auch erst nach einigem hin und her liefen habe ich mal alles in einer absolut neuen VirtualBox testen wollen. Mit folgendem Ergebnis:
Code:
Hat jemand eine Idee, was ich machen muss, damit zumindest mal die VB-Demos funktionieren?
Start auf neuer VirtualBox mit Win7-64 und Office2003 SP3
Testlauf 1 ========== Test 1: DsoFile-Verzeichnis in neues Win7 kopiert FilePropDemoVB6 meldet bei Start "Component 'ComDlg32.ocx' missing" FilePropDemoVB7 meldet "COM-Klassenfactory .. mit CLSID (589....) honnte .. nuícht aufgerufen werden Test 2: Der Demo beiligende DsoFile.dll mit Admin-Rechten registriert FilePropDemoVB6 meldet bei Start "Component 'ComDlg32.ocx' missing" FilePropDemoVB7 funktioniert mit .doc FilePropDemoVB7 meldet bei .docx Klasse nicht registriert (0x80010154 (REGDB_E_CLASSNOTREG)) Test 3: ComDlg32.ocx aus Internet runtergeladen und als Admin registriert FilePropDemoVB6 funktioniert mit .doc FilePropDemoVB6 meldet bei .docx "Error: ActiveX component can´t create object" FilePropDemoVB7 funktioniert mit .doc FilePropDemoVB7 meldet bei .docx Klasse nicht registriert (0x80010154 (REGDB_E_CLASSNOTREG)) Testlauf 2 ========== Test 1: Office2007 FileFormatConverters und DsoFileSetup_KB224351_x86 als Admin installiert FilePropDemoVB6 meldet bei Start "Component 'ComDlg32.ocx' missing" FilePropDemoVB7 funktioniert mit .doc FilePropDemoVB7 meldet bei .docx "Der Name "" ist ungültig (0x800300FC (STG_E_INVALIFNAME)) Test 2: ComDlg32.ocx aus Internet runtergeladen und als Admin registriert FilePropDemoVB6 funktioniert mit .doc FilePropDemoVB6 meldet bei .docx "Error: File not found" FilePropDemoVB7 funktioniert mit .doc FilePropDemoVB7 meldet bei .docx "Der Name "" ist ungültig (0x800300FC (STG_E_INVALIFNAME)) Wenn die DOCX noch von einem anderen Programm geöffnet ist, wird dies aber von VB6 und VB7 gemeldet (Datei gesperrt) Danke Gerd |
AW: Dateieigenschaften /Titel, Thema,...) von Office 2007ff lesen
Hallo,
Da ich z.Z. in Urlaub bin und meinen Computer nicht mithabe, muss ich Dich auf Ende der Woche vertrösten. Nur so viel. Ich verwende ebenfalls Win 7 64. Allerdings habe ich die Beispiele mit Excel 2010 erstellt. Dsofile muss installiert werden. Dabei wird die dll auch registriert. In dem Verzechnis befindet sich dann der komplette Source Code und Beispiele. Gruß Kompi PS: es könnte sein, dass docx Deinem System nicht bekannt ist. Versuche mal die Erweiterung zum Lesen der neuen Formate mit Office 2003 zu installieren. |
AW: Dateieigenschaften /Titel, Thema,...) von Office 2007ff lesen
Hallo,
der Unterschied zwischen Installation und Kopie war eigentlich nur der, dass bei Installation auch gleich die DsiFile.dll registriert wurde. Allerdings nur, wenn die Installation als Admin erfolgte. Um sicherzugehen, dass docx sauber funktioniert, hatte ich bereits ein Dokument als DOC und als DOCX gespeichert. Hatte aber auch nichts gebracht. Die VB-Demos laufen bis jetzt nicht sauber. Mein Problem mit Delphi habe ich aber lösen können. Bisher hatte ich die Properties mithilfe der Unit DSOleFile_TLB ausgelesen. Nachdem ich auf DsoFile_TLB umgestellt habe und dort noch die ClassID angepasst habe, funktioniert das Einlesen der Properties sowohl bei DOC als auch DOCX. Danke und Grüße Gerd |
AW: Dateieigenschaften /Titel, Thema,...) von Office 2007ff lesen
Hallo norwegen60,
anbei Code mit VBA Excel 2010, der zeigt, wie man auf dsofile zugreift. sub lesedir(adir As String) Dim fs, f, fd, fe Dim docliste Dim i As Integer Dim ws As Worksheet Dim s, s1 As String Dim actsheet As Worksheet Dim objfile As DSOFile.OleDocumentProperties Dim csum As DSOFile.SummaryProperties Dim ks As String Dim k As Integer Set actsheet = ActiveSheet Set fs = CreateObject("Scripting.Filesystemobject") Set f = fs.getfolder(adir) Set fd = f.Files Set ws = Worksheets("Dokumente") Set docliste = ws.Range("Dokumentenliste") docliste.ClearContents Set objfile = CreateObject("DSOFile.oledocumentproperties") i = 1 Application.ScreenUpdating = False ws.Select For Each fe In fd s = fe.Name s1 = fe.Type If InStr(1, s1, "Microsoft Word") > 0 Then On Error GoTo weiter1 ks = Left(s, 3) k = CInt(ks) docliste(k, 2) = s objfile.Open (adir & "\" & s) Set csum = objfile.SummaryProperties docliste(k, 1) = csum.Title objfile.Close i = i + 1 weiter1: On Error GoTo 0 End If Next fe Set csum = Nothing Set objfile = Nothing Set docliste = Nothing Set fd = Nothing Set f = Nothing Set fs = Nothing actsheet.Select Application.ScreenUpdating = True End Sub Ich hoffe, das hilft Dir Dein VB Problem auch noch zu lösen. Im übrigen kann man dies genauso mit Delphi lösen. Man muss nicht umständlich eine .._tlb - Datei erstellen. Gruß Kompi |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz