Thema Datum  Von Nutzer Rating
Antwort
25.11.2018 10:33:50 Thommy 7571
NotSolved
25.11.2018 12:44:03 Gast14990
NotSolved
25.11.2018 12:48:04 Thommy 7571
NotSolved
25.11.2018 13:04:30 Gast75958
NotSolved
25.11.2018 13:37:58 Gast34447
NotSolved
25.11.2018 13:59:07 Gast1583
NotSolved
25.11.2018 14:03:53 Gast56849
NotSolved
25.11.2018 14:11:51 Gast65601
NotSolved
25.11.2018 17:22:56 Flotter Feger
NotSolved
25.11.2018 17:50:19 Gast56312
NotSolved
26.11.2018 08:44:42 Thommy 7571
NotSolved
26.11.2018 09:34:09 Thommy 7571
NotSolved
26.11.2018 08:54:54 Thommy 7571
NotSolved
26.11.2018 08:42:08 Thommy 7571
NotSolved
25.11.2018 19:40:45 Gast39177
NotSolved
Blau Blau Bilder aus WORD-Dokument ein anderer Ansatz
26.11.2018 16:33:54 Ulrich
NotSolved

Ansicht des Beitrags:
Von:
Ulrich
Datum:
26.11.2018 16:33:54
Views:
500
Rating: Antwort:
  Ja
Thema:
Bilder aus WORD-Dokument ein anderer Ansatz

Hallo,

ich habe unter Word2016 einen anderen Ansatz erarbeitet:

So werden alle Bilder rausgeschrieben (nach *.tiff konvertieren kann ich nicht).

Sub Idee()
'benötigt Verweis auf:  Microsoft XML v3.0
Dim objXML As MSXML2.DOMDocument
Dim objNode As MSXML2.IXMLDOMElement
Dim InlSh As InlineShape
Dim Filename As String, ff As Integer
Dim tmp() As Byte

Const Pfad As String = "c:\DeinPfad\mit\abschliessendem\Backslash\"             'anpassen

    For Each InlSh In ThisDocument.InlineShapes     ' gibts da noch was anderes außer Bilder => läuft evtl. in einen Fehler?
        Set objXML = New MSXML2.DOMDocument
        objXML.LoadXML InlSh.Range.WordOpenXML
        Filename = objXML.getElementsByTagName("pic:cNvPr").Item(0).Attributes(1).Text
        
        'Bild
        Set objNode = objXML.createElement("b64")
        objNode.dataType = "bin.base64"
        objNode.Text = objXML.getElementsByTagName("pkg:binaryData").Item(0).Text
        tmp = objNode.nodeTypedValue            'base64 codiertes Bild
        
        
        ff = FreeFile()
        Open Pfad & Filename For Binary As #ff
        Put #ff, , tmp                          ' Variable tmp wird benötigt, damit put Länge und Deskriptor nicht schreibt
        Close #ff
    Next
    
    Set objXML = Nothing
    Set objNode = Nothing

End Sub

Bei meinen Tests kamen die *.png, *.jpg und *.tiff genau so raus, wie die Originale waren bevor ich sie in das Worddokument eingefügt habe (auf das bit genau).
Ausnahme: *.bmp wurde Wordintern irgendwie nach png konvertiert. Dementsprechend kam es auch verändert raus und hat die falsche Dateiendung?!  Dem bin ich nicht weiter nachgegangen.

In Word2016 werden die Bilder standardmäßig komprimiert, das muss natürlich abgeschaltet sein, damit die extrahierten Bilder mit den originalen identisch sind (klar, sind die Bilder erst einmal komprimiert, kann man das nicht rückgängig machen).
Evtl. kann man da auch einstellen, dass das mit bmp nicht passiert => nicht im Kern meines Interesses.

Der Code ist als experimentell anzusehen. Es ist das erste Mal, dass ich mit dieser XML-dll arbeite. Keine Ahnung, ob ich da grundsätzliche Fehler gemacht habe, es war mehr so "spielerisches forschen".

Auch sind keine Abfragen drin, die ein Überschreiben vorhandener Dateien verhindern würden (Achtung, da hat man schnell mal ein Original mit was kompimiertem überschrieben). Daher bitte bei der Wahl des Pfades sorgfältig sein!

 

Da du ja nach selektieren und nur einem Bild gefragt hast, hier der gleiche Code, der aber nur das aktuell selektierte Bild exportiert.

Sub selektiertesBildExportieren()
'benötigt Verweis auf:  Microsoft XML v3.0
Dim objXML As MSXML2.DOMDocument
Dim objNode As MSXML2.IXMLDOMElement
Dim Filename As String, ff As Integer
Dim tmp() As Byte

Const Pfad As String = "c:\DeinPfad\mit\abschliessendem\Backslash\"             'anpassen

    Set objXML = New MSXML2.DOMDocument
    objXML.LoadXML Selection.WordOpenXML
    Filename = objXML.getElementsByTagName("pic:cNvPr").Item(0).Attributes(1).Text
    
    'Bild
    Set objNode = objXML.createElement("b64")
    objNode.dataType = "bin.base64"
    objNode.Text = objXML.getElementsByTagName("pkg:binaryData").Item(0).Text
    tmp = objNode.nodeTypedValue            'base64 codiertes Bild
    
    
    ff = FreeFile()
    Open Pfad & Filename For Binary As #ff
    Put #ff, , tmp                          ' Variable tmp wird benötigt, damit put Länge und Deskriptor nicht schreibt
    Close #ff

    Set objXML = Nothing
    Set objNode = Nothing

End Sub

Bei beiden Codes ist ein Verweis auf "Microsoft XML v3.0" nötig. Höhere Versionen gehen bestimmt auch, ich habe einfach mal die 3.0 benutzt ...

Grüße, Ulrich


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
25.11.2018 10:33:50 Thommy 7571
NotSolved
25.11.2018 12:44:03 Gast14990
NotSolved
25.11.2018 12:48:04 Thommy 7571
NotSolved
25.11.2018 13:04:30 Gast75958
NotSolved
25.11.2018 13:37:58 Gast34447
NotSolved
25.11.2018 13:59:07 Gast1583
NotSolved
25.11.2018 14:03:53 Gast56849
NotSolved
25.11.2018 14:11:51 Gast65601
NotSolved
25.11.2018 17:22:56 Flotter Feger
NotSolved
25.11.2018 17:50:19 Gast56312
NotSolved
26.11.2018 08:44:42 Thommy 7571
NotSolved
26.11.2018 09:34:09 Thommy 7571
NotSolved
26.11.2018 08:54:54 Thommy 7571
NotSolved
26.11.2018 08:42:08 Thommy 7571
NotSolved
25.11.2018 19:40:45 Gast39177
NotSolved
Blau Blau Bilder aus WORD-Dokument ein anderer Ansatz
26.11.2018 16:33:54 Ulrich
NotSolved