none
Word-Dokument mit Daten aus Access-Datenbank befüllen - best practice RRS feed

  • Frage

  • Seit Jahren berabeite ich Word-Dokumente von Access VBA aus.

    Dazu öffnet Access eine Word-Instanz, erzeugt aus einer Vorlage ein neues Dokument.

    Danach werden erst allgemeine Felder wie Titel und keywords von Access aus befüllt.

    Später dann wird jeweils gsucht ob eine Bookmark existiert und falls ja dort die Daten eingesetzt.

    Dieses Verfahren nutze ich, da unterschiedliche Vorlagen unterschiedliche Daten benötigen.

    Das funktioniert an sich; es dauert aber unsagbar lange und bisweilen hängt dieser Prozess. Erst wenn ich dann mal in die (sichtbare) WOr-INstanz klicke geht es weiter.

    Daher ist es an der Zeit zu überlegen ob mein Vorgehen der beste Weg ist oder ob es bessere Verfahren gibt.

    Ich bin mit Sicherheit nicht der Einzige auf diesem Planeten, der Word-Dokumente mit Datenbank-Daten vor-belegt

    Ein Serienrbief scheint mir ungeeignet, da immer nur EIN Dokument erzeugt wird.

    Montag, 22. Februar 2021 10:10

Antworten

  • Hallo Nico,

    generell rate ich von Office Automation ab. Allerdings erscheint es zwischen einzelnen Office Anwendungen an sich ja eigentlich sinnvoll.

    Ich für meinen Teil nutze für solche Anforderungen Komponenten wie bspw. Syncfusion DocIO (ich empfehle diese, da es sie - auch für kleine Unternehmen und für kommerzielle Zwecke - im Rahmen einer Community Edition auch kostenlos gibt). Damit lässt sich problemlos so gut wie alles, was mit Word machbar ist, auf ähnliche Weise nachbauen. Darüber hinaus gibt es noch weitere hilfreiche Features. Der wohl wichtigste Punkt ist meiner Meinung nach aber, dass man auf dem Ziel PC/Server keine Word Installation voraussetzt. Es ist daher auch völlig egal, welchge Version von Word vorhanden wäre/ist. Da man keine Anwendung automatisiert, bleiben auch keine Zombieprozesse oder ähnliches zurück.

    Für die Ansteuerung nutze ich meist eine .NET Anwendung, die dann die Daten aus der Datenquelle liest und darauf basierend die Word Datei erzeugt. Ob aus einer Vorlage oder als ganz neues Dokument hängt dabei von den Anforderungen ab.

    Den Teil mit .NET kannst Du ggfs. auch weglassen, ich selbst habe allerdings noch nicht probiert, ob die Komponenten auch über COM verwendbar sind. Könntest Du aber mal probieren, dann kannst Du die ggfs. direkt aus Access heraus ansprechen.

    Als kleines Beispiel etwas aus einem meiner Projekt. Dort erzeugte ich eine Word Datei aus einer Vorlage, ersetze bestimmte Platzhaltertexte und speichere das Ganze wieder.

    MemoryStream result = new MemoryStream();
    FileStream docStream = new FileStream( args.TemplateFilePath, FileMode.Open, FileAccess.Read );
    
    WordDocument wordDocument = new WordDocument( docStream, FormatType.Automatic );
    
    foreach( KeyValuePair replacementItem in args.Replacements ) {
        TextSelection textSelection = wordDocument.Find( replacementItem.Key, false, true );
        if( textSelection != null ) {
            WTextRange textRange = textSelection.GetAsOneRange();
            if( textRange != null ) {
                textRange.Text = replacementItem.Value;
            }
        }
    }
    
    wordDocument.Save( result, fileType );
    wordDocument.Dispose();
    ...

    HTH



    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    • Als Antwort markiert NicoNi Dienstag, 23. Februar 2021 08:58
    Montag, 22. Februar 2021 10:37
    Moderator