2017-12-02 6 views
-1

Ich versuche, Microsoft Word-Dokumente aus meiner C# -Anwendung mit Microsoft.Office.Interop.Word Bibliothek zu erstellen. Ich verwende eine Vorlagendatei, um mehrere Bausteine ​​zu halten und ein Dokument mit ihnen so zu rüsten:Wie ordnungsgemäß Att AttachedTemplate bei Verwendung von Word.Interop zugreifen?

using Word = Microsoft.Office.Interop.Word 

Word.Application wdApplication = null; 
dynamic wdDocument = null; 

try { 
    wdApplication = new Word.Application(); 
    wdDocument = wdApplication.Documents.Add(Properties.Settings.Default.Template); 
    wdDocument.AttachedTemplate.BuildingBlockEntries("Agenda.Header").Insert(wdDocument.Paragraphs.Last().Range); 
    // ... 
} catch { } 

So funktioniert alles gut. Das Problem liegt daran, dass ich wdDocument als dynamic deklariere. Ich bekomme keine IntelliSense-Hinweise, die mir sonst viel Zeit und Mühe ersparen würden.

Allerdings, wenn ich versuche zu erklären wdDocument als Word.Document ich die folgende Fehlermeldung erhalten:

Error CS1545 Property, indexer, or event '_Document.AttachedTemplate' is not supported by the language; try directly calling accessor methods '_Document.get_AttachedTemplate()' or '_Document.set_AttachedTemplate(ref object)'

Ich habe auch versucht wdDocument als Microsoft.Office.Tools.Word.Document erklärt, sondern dass nur Fehler Typumwandlung eingeführt zwischen wdApplication ein wdDocument.

Wie deklarieren Sie einen Dokumenttyp korrekt oder greifen Sie auf Bausteine ​​zu, die in der angehängten Vorlage gespeichert sind?

+0

@mjwills Ich habe diesen Link gesehen, aber leider ist es nicht anders. Es geht darum, die angehängte Vorlage festzulegen und nicht auf ihre Eigenschaften zuzugreifen. Danke trotzdem! – heuels

+1

Also 'get_AttachedTemplate' funktioniert nicht für Sie? – mjwills

+0

Können Sie den Compilerfehler teilen, den Sie erhalten, wenn Sie 'get_AttachedTemplate()' versuchen? – mjwills

Antwort

1

Vielen Dank an @mjwills, die mich auf die richtige Spur gebracht haben. Dies ist mein letzter Code für ein Word-Dokument mit Bausteinen zu erstellen:

using Word = Microsoft.Office.Interop.Word; 

public class Agenda { 
    public static void Create() { 
    Word.Application wordApplication = null; 
    Word.Document wdDocument = null; 
    Word.Template wdTemplate = null; 
    Word.BuildingBlock wdBuildingBlock = null; 

    object paramBBCategory = "Agenda"; 
    object paramBBName = "Header"; 

    try { 
     wordApplication = new Word.Application(); 
     wdDocument = wordApplication.Documents.Add(Properties.Settings.Default.Template); 
     wdTemplate = (Word.Template)wdDocument.get_AttachedTemplate(); 

     wdBuildingBlock = wdTemplate 
     .BuildingBlockTypes.Item(Word.WdBuildingBlockTypes.wdTypeQuickParts) 
     .Categories.Item(ref paramBBCategory) 
     .BuildingBlocks.Item(ref paramBBName); 
     wordBuildingBlock.Insert(wdDocument.Paragraphs.Last.Range); 
    } catch { } 
    } 
} 

diese großen Artikel auf MSDN Referenz: Retrieving Custom Building Blocks from Templates in Word 2007

Verwandte Themen