2009-02-26 8 views
1

Ich muss Dokumente erstellen, (~ 150 Berichte, Briefe) meist aus bereits vorhandenen Snippets und lokalen Datenbanken mit VBA in Word 2003. Ich muss dann bestimmte Teile dieser Schnipsel ändern wie z. B. Daten, Sätze, Benutzerinformationen, & c. Es gibt natürlich auch einige Bits, die ich in meinem Programm erzeugen werde.Erstellen von Word oder XML-Dokument mit VBA

Zur Zeit wird die gleiche Aufgabe (Art) von einigen scheußlichen Legacy-VBA getan. (Geschachtelte IFs und FORs und über 200 Textfelder, alle als TextBox # bezeichnet) Es erledigt die Aufgabe SOMETIMES und sendet dazu Anweisungen an die Word-Anwendung (zB Selection.MoveDown Unit:wdLine, Count:=1). Folglich dauert die Erzeugung eines einfachen Buchstabens 30 Sekunden. und stürzt Office ab.

Ich bin durchaus in der Lage, mit Bereichen und Lesezeichen und verbesserter Logik dasselbe zu tun, aber mein Bauchgefühl ist, dass dies mit XML einfach sein sollte und dass dies Vorteile in der Zukunft haben wird, wie diese Auf Berichte/Briefe muss zugegriffen werden, und wahrscheinlich werden sie programmatisch oft von vielen verschiedenen Benutzern und Anwendungen gelesen.

Ich habe über XML und das WordML-Schema gelesen, aber fühle mich wie ich etwas vermisse.

Was ich den Code auf Submit tun möchte, ist dies:

  1. Schnappen vordefinierten XML-Schnipsel (Header, Footer, etc.)
  2. neue Saiten generieren und vordefinierten XML-Strings
  3. Speichern verketten als XML
  4. Wert ändert bestehender Tags in XML-Datei (Datum, Benutzername, usw.)

ich dies tun kann.

Die Fragen, die ich habe, sind:

  • ich Mühe, meinen Kopf um Schema und Namespaces worden ist. Die Daten sind bereits durch den VBA-Code validiert. Wofür benötige ich ein Schema?

  • Ist es besser, das Dokument zu erstellen, indem Sie einen langen verketteten String erstellen, der den XML-Code für das gesamte Dokument enthält, wobei in meinem Modell ein Großteil des XML aus vorhandenen Snippets stammt oder XML Dom verwendet und erstellt wird programmatisch es:

20 Set oElementName = oDOM.createElement("Name")

30 oElement.appendChild oElementName

40 oElementName.Text = "This is the text of name"

  • WIE STILDE ICH DAS DOKUMENT? (Dies hat mir konzeptuell am meisten Probleme bereitet.) Ich möchte es nicht speziell aus dem WordML zurückentwickeln, das Word generiert, wenn es speichert. Ich nehme an, dass ich es zuerst in HTML konvertieren muss? Kann ich ein Stylesheet in Word erstellen, damit es automatisch formatiert wird?

Macht irgendwas Sinn? Sollte ich stattdessen nur Bereiche und Lesezeichen verwenden?

XML scheint mir mächtig, aber es könnte ein verdrehter Fall des Hammer- und Nagelproblems sein, d.h."Ich möchte Hammer lernen, also sieht jedes Problem wie ein Nagel aus und gibt mir einen guten Grund Hammer zu lernen."

(Ich weiß, ich sollte nicht lernen, Dinge so zu machen, wie ich sie mache! Aber ich bin nur eine gedankenlose Drohne, die sich über die Qualität unseres Dokumentenerzeugungssystems genug beschwerte, dass sie sagten: "Halt den Mund und repariere es dann! Oh, Sie kennen keine VBA? Nun, wir können es uns nicht leisten, Sie auf einen Kurs oder irgendetwas zu schicken, also lernen Sie, wie Sie gehen. "Es war das beste und schlechteste 2 Monate meines Arbeitslebens."

Ich weiß es zu schätzen, dass Sie all das durchgelesen haben, wenn Sie es getan haben, und jede Hilfe/Beratung, die Sie haben könnten!

Antwort

0

Okay, also habe ich eine Antwort auf den Styling-Teil meiner Probleme gefunden. (Ich finde diese Dinge immer kurz nachdem ich Fragen gestellt habe!)

Und nachdem ich das gelesen habe, macht es viel mehr Sinn für mich!

Von: http://www.tkachenko.com/blog/archives/000024.html

<?xml-stylesheet type="text/xsl" href="style.xsl"?> 
<chapter title="XSLT Programming"> 
    <para>It's <i>very</i> simple. Just ask <link 
url="http://google.com">Google</link>.</para> 
</chapter> 

Dann XSLT-Stylesheet (ganz großen aufgrund ausführlicher elementbasierte WordML-Syntax):

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:o="urn:schemas-microsoft-com:office:office" 
xmlns:w="http://schemas.microsoft.com/office/word/2003/2/wordml"> 
    <xsl:template match="/"> 
     <xsl:processing-instruction 
name="mso-application">progid="Word.Document"</xsl:processing-instruction> 
     <w:wordDocument> 
      <xsl:apply-templates/> 
     </w:wordDocument> 
    </xsl:template> 
    <xsl:template match="chapter"> 
     <o:DocumentProperties> 
      <o:Title> 
       <xsl:value-of select="@title"/> 
      </o:Title> 
     </o:DocumentProperties> 
     <w:styles> 
      <w:style w:type="paragraph" w:styleId="Heading3"> 
       <w:name w:val="heading 3"/> 
       <w:pPr> 
        <w:pStyle w:val="Heading3"/> 
        <w:keepNext/> 
        <w:spacing w:before="240" w:after="60"/> 
        <w:outlineLvl w:val="2"/> 
       </w:pPr> 
       <w:rPr> 
        <w:rFonts w:ascii="Arial" w:h-ansi="Arial"/> 
        <w:b/> 
        <w:sz w:val="26"/> 
       </w:rPr> 
      </w:style> 
      <w:style w:type="character" w:styleId="Hyperlink"> 
       <w:rPr> 
        <w:color w:val="0000FF"/> 
        <w:u w:val="single"/> 
       </w:rPr> 
      </w:style> 
     </w:styles> 
     <w:body> 
      <w:p> 
       <w:pPr> 
        <w:pStyle w:val="Heading3"/> 
       </w:pPr> 
       <w:r> 
        <w:t> 
         <xsl:value-of select="@title"/> 
        </w:t> 
       </w:r> 
      </w:p> 
      <xsl:apply-templates/> 
     </w:body> 
    </xsl:template> 
    <xsl:template match="para"> 
     <w:p> 
      <xsl:apply-templates/> 
     </w:p> 
    </xsl:template> 
    <xsl:template match="i"> 
     <w:r> 
      <w:rPr> 
       <w:i/> 
      </w:rPr> 
      <xsl:apply-templates/> 
     </w:r> 
    </xsl:template> 
    <xsl:template match="text()"> 
     <w:r> 
      <w:t xml:space="preserve"><xsl:value-of 
select="."/></w:t> 
     </w:r> 
    </xsl:template> 
    <xsl:template match="link"> 
     <w:hlink w:dest="{@url}"> 
      <w:r> 
       <w:rPr> 
        <w:rStyle w:val="Hyperlink"/> 
        <w:i/> 
       </w:rPr> 
       <xsl:apply-templates/> 
      </w:r> 
     </w:hlink> 
    </xsl:template> 
</xsl:stylesheet> 
1

Ich weiß nicht, die Umstände Ihres Einsatzes und dort Vielleicht sind dies gute Gründe, um mit Ihrem Technologie-Stack voranzukommen, aber es scheint, dass eine solch große Investition (150 Berichte sind groß) in Office 2003 neu überdacht werden sollte. Während Microsoft sagt, dass VBA nicht weggehen wird, denke ich, dass das Open XML SDK eine bessere Zukunft hat.

Hier ist ein excellent introduction in die XML-Markup.

+0

Danke für Ihre Antwort. Ich habe in Open XML gelesen und es sieht gut aus, und es wurde davon gesprochen, dass Office 2007 Ende dieses Jahres ins Büro eingeführt wird, aber ich habe kürzlich bestätigt, dass dies erst Mitte 2010 geschehen wird. Also hier bin ich leider. – user51498

Verwandte Themen