2016-03-23 12 views
0

Ich verwende ein Skript (das ich nicht geschrieben habe), um Word-Dokumente in XML zu konvertieren. Alles funktioniert einwandfrei, solange das Word-Dokument einheitlich gestaltet ist. Eines der Dinge, die das Skript nicht verarbeiten kann, ist, wenn Bilder als OLE-Objekte eingefügt werden. Diese Bilder werden vom Skript einfach ignoriert, wohingegen Bilder, die regelmäßig als Nicht-OLE-Objekte eingefügt wurden, vom Skript gut aufgenommen werden.Können Sie Bilddaten aus einem OLE-Objekt in Word mithilfe von VBA abrufen?

Ich habe auch ein VBA-Skript verwendet (siehe Teil unten), um das Dokument vor der Umwandlung zu bereinigen. Das Skript fügt dem Dokument Stile hinzu, verschiebt einige Dinge und ... was ich versuche, es zu machen, besteht darin, OLE-Bilder in Nicht-OLE-Bilder zu konvertieren.

Also was ich wissen möchte ist: Gibt es eine Möglichkeit, die InlineShapes im Dokument zu durchlaufen und OLE-Grafiken in reguläre Grafiken zu konvertieren oder gibt es eine Möglichkeit, die Bilddaten aus dem OLE-Objekt zu holen und einzufügen in das Dokument als PNG. Diese

ist, was mein vba Skript jetzt tut:

Sub docscrubber() 

Dim i As Integer 
Dim total As Integer 
Dim oIshp As InlineShape 

total = ActiveDocument.InlineShapes.Count 
i = 0 
For Each oIshp In ActiveDocument.InlineShapes 
    i = i + 1 
    On Error Resume Next 
    Application.StatusBar = "Progress: " & i & " of " & total 
     With oIshp 

     oIshp.Range.Copy 
     oIshp.Select 
     Selection.Paste 

     End With 
Next oIshp 

End Sub 

Statt die Bilddaten zu bekommen, ich das Dokument Code.

Vielen Dank im Voraus!

Antwort

1

Da ich weiß nicht, was OLE-Server diese verbunden ist, und haben wahrscheinlich nicht einmal das, kann ich einen definitiven Test nicht tun, aber ...

OLE-Objekte in Word, die wie bei jeder dynamischen Information, werden durch Feldcodes verwaltet. Sie können die Anzeige von Feldcodes mit Alt + F9 ein- und ausschalten. Für die Formate, die ich getestet habe, waren dies EMBED-Felder.

Um Feldinhalt in statischen Inhalt zu verwandeln (die OLE-Objekte in ihre grafische Darstellung), sollte die Verknüpfung des Felds aufgehoben werden. Basierend auf dem Code, den Sie uns zeigen, scheint so etwas ähnlich zu sein:

For Each oIshp In ActiveDocument.InlineShapes 
    i = i + 1 
    'On Error Resume Next ' do NOT use this! 
    Application.StatusBar = "Progress: " & i & " of " & total 
    With oIshp 
     If oIshp.Range.Fields.Count = 1 Then 
     oIshp.Range.Fields.Unlink 
     End If 
    End With 
Next oIshp