none
Word / PasteAndFormat (wdFormatOriginalFormatting) Problem - Bildinhalt nicht eingefügt RRS feed

  • Frage

  • Hallo,

    wir müssen ein durch MailMerge erzeugtes Word-Dokument später wieder in einzelne Dokumente splitten. Das machen wir mit einem Makro bzw. VBA über der COM-Schnittstelle. Im Prinzip funktioniert dies auch. Allerdings treten bei manchen Dokumente Probleme mit Bildern auf. Im gesplitteten Dokument ist dann nur ein "rotes X" zu sehen (siehe Screenshot).

    Verschiedene Versuche haben gezeigt, dass wenn man Word nach dem Laden "Zeit" gibt und danach erst den Splitvorgang startet, dass die Bilder richtig mit eingefügt werden. Die Word-Version spielt dabei keine Rolle.

    Derselbe Effekt zeigt sich auch, wenn man die Funktion ExportAsFixedFormat verwendet.

    Gibt es dafür eine Lösung oder ist es ein Word-Bug?

    Beispielmakro:

    Sub Split()
    '
    ' Split Makro
    '
    '
    Dim i As Long, inner As Long, anzahl As Long, SectionsWithinNewDoc As Long
    Dim Source As Document, Target As Document, sel As Selection, part As Range
    Dim docname As String, pdfname As String, template As String
    
    Documents.Open ("c:\temp\00004606k.doc")
    
    Set Source = ActiveDocument
    
    template = Source.AttachedTemplate.FullName
    
    anzahl = 5
    SectionsWithinNewDoc = 1
            
    For i = 1 To anzahl
        docname = "c:\temp\wsplit_" & i & ".doc"
        pdfname = "c:\temp\wsplit_" & i & ".pdf"
        
        Set Target = Documents.Add
        'Set Target = Documents.Add(template)
    
        For inner = 1 To SectionsWithinNewDoc
            Set part = Source.sections.Item(inner + ((i - 1) * SectionsWithinNewDoc)).Range
            part.ExportAsFixedFormat OutputFileName:=pdfname, ExportFormat:=wdExportFormatPDF
            part.Copy
    
            Target.sections.Last.Range.PasteAndFormat (wdFormatOriginalFormatting)
    
            Target.sections.Item(inner).PageSetup.SectionStart = Source.sections.Item(inner + ((i - 1) * SectionsWithinNewDoc)).PageSetup.SectionStart
        Next
    
        Target.sections.Item(SectionsWithinNewDoc + 1).PageSetup.SectionStart = wdSectionContinuous
    
        Target.SaveAs (docname)
        Target.Close (-1)
    Next
    Source.Close (0)
    
    End Sub
    
    
    



    Montag, 17. Oktober 2011 05:38

Antworten

  • Hallo Michael,

    Ich konnte das Problem reproduzieren. Das Problem lässt sich lösen durch "umspeichern": doc -> docx -> doc

    [habe mit Office 2010 SP1 gearbeitet]

    1. Speichern 00004606k.doc als 00004606k.docx

    2. Speichern 00004606k.docx wieder als 00004606k.doc

    Dann hat es bei mir korrekt funktioniert.

    Viele Grüße,

    Bogdan


    Ich bin gerne bei den Foren. Es kommt von Herzen. Es wird aber keine implizite oder sonstige Garantie für die geposteten Antworte / Informationen gewährt. Hier auch die Forenregeln.
    Dienstag, 1. November 2011 08:38

Alle Antworten

  • Hi

    füge mal bitte testweise am Anfang ein

    Source.Fields.Update
    Source.Repaginate

    ein, damit Word Zeit bekommt die Bilder und Seitenumbrüche zu überprüfen/aktualisieren.

     

    HTH
    Christian


    Gruß Christian
    Dienstag, 18. Oktober 2011 06:08
  • Hallo Christian,

    danke für deinen Vorschlag. Ich habe es versucht, aber leider ändert sich am Verhalten nichts.

    Gruß Michael

    Mittwoch, 19. Oktober 2011 08:06
  • Hallo Michael,

    wie sind denn die Bilder bei den betroffenen - es scheinen ja nicht alle zu sein - eingefügt?

    Evtl. ist es ein Timing-Problem, das mit zusätzlichen

    DoEvents

    und/oder Pausen abgefangen werden kann.

    Kannst du eine Gemeinsamkeit bei den jeweiligen Dokumenten ersehen (Bildgrößen, Speicherort ó.ä.)?

     

    Gruß

    Christian 


    Gruß Christian
    Donnerstag, 20. Oktober 2011 05:38
  • Hallo Christian,

    das Orginaldokument hat pro "Datensatz" einige Bilder in der ersten Kopfzeile und dann noch einige im Text. Im ersten der Splitdokumente sind die Bilder in der Kopfzeile enthalten (und einige der im Kopf). Bei den den restlichen Splitdokumenten ist dann kein Bild mehr enthalten.

    Im Orginaldokument sind die Bilder direkt enthalten (ich denke jedes Bild einmal, obwohl das Beispieldokument 5 "Datensätze" hatund somit jedes Bild auch 5 mal enthalten ist).

    Ich vermute auch ein Timing-Problem, denn wenn man z.B. nach dem Öffnen des Dokuments 20 Sekunden wartet, sind die Bilder richtig in den gesplitteten Dokumenten enthalten. Einige Versuche zeigten, dass die Wartezeit jedoch abhängig vom Rechner, Anzahl der Datensätze, Anzahl enthaltene Bilder, ... ist.

    Nachdem wir das Splitten von Dokumenten in einem Workflow unserer Anwendung integrieren müssen und die Rahmenbedingungen bei jedem Kunden anders sein können, wäre es gut nicht jedesmal die "richtige Wartezeit" zu ermitteln, sondern zu ermitteln (z.B. über Events), wann mit dem Splitten begonnen werden kann.

    Ich habe auch schon in Schleifen gewartet, bis Source.SpellingChecked und Source.GrammerChecked auf true waren - änderte eigentlich nichts. Ich habe auch versucht, an den Shapes bzw. InlineShapes des Originaldokuments zu erkennen, ob die Bilder "fertig" sind, fand allerdings nichts brauchbares.

    Kann man erkennen/feststellen, ob Word die Formatierung abgeschlossen hat?

    Ist es möglich das Dokument im Forum hochzuladen?

    Gruß Michael

     

    Freitag, 21. Oktober 2011 06:45
  • Hallo Michael,
    Probiere bitte diesen Workaround mit Application.OnTime. Er soll funktionieren:
    Sub Split()
    
    Documents.Open ("c:\temp\00004606k.doc")
    Application.OnTime Now, "StartSplit"
    
    End Sub
    
    Public Sub StartSplit()
    Dim i As Long, inner As Long, anzahl As Long, SectionsWithinNewDoc As Long
    Dim Source As Document, Target As Document, sel As Selection, part As Range
    Dim docname As String, pdfname As String, template As String
    
    Set Source = ActiveDocument
    
    template = Source.AttachedTemplate.FullName
    
    anzahl = 5
    SectionsWithinNewDoc = 1
            
    For i = 1 To anzahl
        docname = "c:\temp\wsplit_" & i & ".doc"
        pdfname = "c:\temp\wsplit_" & i & ".pdf"
        
        Set Target = Documents.Add
        'Set Target = Documents.Add(template)
    
        For inner = 1 To SectionsWithinNewDoc
            Set part = Source.Sections.Item(inner + ((i - 1) * SectionsWithinNewDoc)).Range
            part.ExportAsFixedFormat OutputFileName:=pdfname, ExportFormat:=wdExportFormatPDF
            part.Copy
    
            Target.Sections.Last.Range.PasteAndFormat (wdFormatOriginalFormatting)
    
            Target.Sections.Item(inner).PageSetup.SectionStart = Source.Sections.Item(inner + ((i - 1) * SectionsWithinNewDoc)).PageSetup.SectionStart
        Next
    
        Target.Sections.Item(SectionsWithinNewDoc + 1).PageSetup.SectionStart = wdSectionContinuous
    
        Target.SaveAs (docname)
        Target.Close (-1)
    Next
    Source.Close (0)
    
    End Sub
    
    
    
    

     
     
    Grüße,
    Bogdan

    Ich bin gerne bei den Foren. Es kommt von Herzen. Es wird aber keine implizite oder sonstige Garantie für die geposteten Antworte / Informationen gewährt. Hier auch die Forenregeln.
    Freitag, 21. Oktober 2011 13:45
  • Hallo Bogdan,

    ich habe deinen Workaround versucht. Es ändert leider nichts.

    Gruß Michael

     

    Montag, 24. Oktober 2011 07:24
  • Hallo Michael,

    Du kannst mithilfe von http://skydrive.live.com hier im Forum das Dokument hochladen.
     
    Grüße,
    Bogdan


    Ich bin gerne bei den Foren. Es kommt von Herzen. Es wird aber keine implizite oder sonstige Garantie für die geposteten Antworte / Informationen gewährt. Hier auch die Forenregeln.
    Montag, 24. Oktober 2011 13:04
  • Hallo Bogdan,

    ich habe das Dokument (und die Splitergebnisse) hochgeladen.

    Gruß Michael

    Mittwoch, 26. Oktober 2011 05:01
  • Hallo Michael,

    kannst Du bitte das Link zu der Datei angeben. Nur mit deinem UserId kann leider ich nicht zu Deinen Sky Share kommen. Einfach gehe mit der Rechtemaustaste auf dem Dokument und mach: "Copy shortcut"...

    Vielen Dank.

    VG/Bogdan


    Ich bin gerne bei den Foren. Es kommt von Herzen. Es wird aber keine implizite oder sonstige Garantie für die geposteten Antworte / Informationen gewährt. Hier auch die Forenregeln.
    Mittwoch, 26. Oktober 2011 07:32
  • Hallo Bogdan,

    hier sollten die Dokumente in Skydrive sein.

    Gruß Michael

    Freitag, 28. Oktober 2011 04:53
  • Vielen Dank Michael,

    Gefunden. Heute werde ich damit versuchen, das Problem zu reproduzieren.

    VG/Bogdan


    Ich bin gerne bei den Foren. Es kommt von Herzen. Es wird aber keine implizite oder sonstige Garantie für die geposteten Antworte / Informationen gewährt. Hier auch die Forenregeln.
    Dienstag, 1. November 2011 07:37
  • Hallo Bogdan,

    Bitte schreibe mich mal per Mail an avenius [at] avenius.de

    Gruß
    Gunter

    Dienstag, 1. November 2011 07:44
  • Hallo Michael,

    Ich konnte das Problem reproduzieren. Das Problem lässt sich lösen durch "umspeichern": doc -> docx -> doc

    [habe mit Office 2010 SP1 gearbeitet]

    1. Speichern 00004606k.doc als 00004606k.docx

    2. Speichern 00004606k.docx wieder als 00004606k.doc

    Dann hat es bei mir korrekt funktioniert.

    Viele Grüße,

    Bogdan


    Ich bin gerne bei den Foren. Es kommt von Herzen. Es wird aber keine implizite oder sonstige Garantie für die geposteten Antworte / Informationen gewährt. Hier auch die Forenregeln.
    Dienstag, 1. November 2011 08:38
  • Hallo Bogdan,

    ich habe die Umspeicherung gemacht. Danach hat es auch bei mir funktioniert. Danke.

    Das Problem liegt dann schon beim Speichern des Seriendruck-Dokuments.

    Gruß Michael
    Donnerstag, 3. November 2011 06:26