Announcement

Collapse
No announcement yet.

TWordApplication und TWordDocument nicht gefunden

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • TWordApplication und TWordDocument nicht gefunden

    Hallo,

    Ich wollte als ersten grösseren Versuch eine bestehende D7-Anwendung unter D8 Compilieren.

    Dabei findet der Compiler die o.a. Komponenten nicht.

    Ich erinnere mich, daß ich auch unter D7 die WordXX.TLB einbinden musste, kann Sie aber unter D8 nicht finden.

    Geht diese Zugriffsart auf Office-Objekte unter D8 überhaupt noch ? Oder hat MS hier mal wieder jede Abwärtskompatibilität über den Haufen geworfen ?

    mfg Dieter

  • #2
    Hallo,

    nicht Microsoft hat etwas über den Haufen geworfen, sondern Borland hat im Fall von Delphi 8 nicht alle Teile fertig bekommen, die in den letzten Delphi-Versionen an Bord waren. Der Zugriff über die späte Bindung (a la OleVariant) geht in Delphi 8 überhaupt nicht mehr, somit gibt es gegenüber VB.NET kein vergleichbares bequemes Gegenstück für die späte Bindung.

    Was aber geht, ist der Zugriff über die frühe Bindung, nachdem dem Projekt ein Verweis auf die <i>Microsoft Word 10.0 Object Library</i> hinzugefügt wurde und auch der Namespace <i>System.Runtime.InteropServices</i> eingebunden wird.

    Das folgende C#-Beispiel demonstriert den Zugriff auf Word (in VB.NET geht das selbstverständlich einfacher, da dort die optionalen Parameter uneingeschränkt genutzt werden können):
    <pre>
    <b>private</b> <b>void</b> button1_Click(<b>object</b> sender, System.EventArgs e)
    {
    <b>string</b> sDOT = <b>null</b>;
    openFileDialog1.InitialDirectory = @<font color="#9933CC">&quot;D:\Daten\VSNET2003\WordXPAut omation&quot;</font> ;
    <b>if</b>(openFileDialog1.ShowDialog() == DialogResult.OK)
    {
    sDOT = openFileDialog1.FileName;
    <br>
    <font color="#003399"><i>// Instanz von Microsoft Word XP über Automation anfordern.</i></font>
    <br> Microsoft.Office.Interop.Word.ApplicationClass oMsWord = <b>new</b> Microsoft.Office.Interop.Word.ApplicationClass();
    <br> Microsoft.Office.Interop.Word.Documents oMsDocs = oMsWord.Documents;
    <br>
    <font color="#003399"><i>// Automation-Instanz anzeigen</i></font>
    oMsWord.Visible = <b>true</b>;
    <br>
    <font color="#003399"><i>// Neues Word-Dokument von der ausgewählten Vorlage anlegen</i></font>
    <b>object</b> oMissingValue = System.Reflection.Missing.Value;
    <b>object</b> oTemplateName = (<b>object</b>) sDOT;
    <b>object</b> oNewTemplate = <b>false</b>;
    <b>object</b> oDocType = 0;
    <b>object</b> oMakeDocVisible = <b>true</b>;
    <br> Microsoft.Office.Interop.Word._Document oNewMsWordDoc;
    oNewMsWordDoc = oMsWord.Documents.Add(<b>ref</b> oTemplateName, <b>ref</b> oNewTemplate,
    <b>ref</b> oDocType, <b>ref</b> oMakeDocVisible);
    <font color="#003399"><i>// Dokumentenschutz aufheben, falls notwendig</i></font>
    <b>if</b>(oNewMsWordDoc.ProtectionType != Microsoft.Office.Interop.Word.WdProtectionType.wdN oProtection)
    {
    oNewMsWordDoc.Unprotect(<b>ref</b> oMissingValue);
    }
    <br>
    <font color="#003399"><i>// Text über eine Textmarke in das Dokument eintragen</i></font>
    <b>object</b> oBmkCounty = <font color="#9933CC">&quot;Textmarke1&quot;</font>;
    <br> oNewMsWordDoc.Bookmarks.get_Item(<b>ref</b> oBmkCounty).Range.Text = <font color="#9933CC">&quot;Der .NET-Wert.&quot;</font>;
    <br>
    <br>
    <font color="#003399"><i>// 10 Sekunden Pause</i></font>
    System.Threading.Thread.Sleep(10000);
    <br>
    <font color="#003399"><i>// Dokument schließen und aufräumen</i></font>
    <b>object</b> oSaveChanges = <b>false</b>;
    oNewMsWordDoc.Close(<b>ref</b> oSaveChanges, <b>ref</b> oMissingValue, <b>ref</b> oMissingValue);
    Marshal.ReleaseComObject(oNewMsWordDoc);
    Marshal.ReleaseComObject(oMsDocs);
    oMsWord.Quit(<b>ref</b> oMissingValue, <b>ref</b> oMissingValue, <b>ref</b> oMissingValue);
    Marshal.ReleaseComObject(oMsWord);
    oMsWord = <b>null</b>;
    }
    }
    </pre&gt

    Comment

    Working...
    X