2017-12-02 14 views
-1

Microsoft.Office.Interop.Wordライブラリを使用してC#アプリケーションからMicrosoft Word文書を作成しようとしています。テンプレートファイルを使用していくつかのビルディングブロックを保持し、次のようなドキュメントを足場にします:Word.Interopを使用するときにAtttachedTemplateに正しくアクセスするにはどうすればよいですか?

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 { } 

このようにすべてうまくいきます。問題は、私がwdDocumentとしてdynamicと宣言しているためです。そうしないと、多くの時間と労力を節約できるIntelliSenseのヒントはありません。

しかし、私は、私は次のエラーを取得するwdDocumentWord.Documentとして宣言しようとすると:

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)'

は私もMicrosoft.Office.Tools.Word.DocumentとしてwdDocumentを宣言しようとしたが、唯一wdApplicationwdDocument間の型変換エラーを導入していること。

添付ファイルのテンプレートに格納されているドキュメントタイプを宣言したり、ビルディングブロックにアクセスする正しい方法は何ですか?

+0

@mjwillsを私はそのリンクを見てきましたが、残念ながらそれは助けにはならないこれは、ビルディングブロックとWord文書を作成するための私の最終的なコードです。それは添付されたテンプレートを設定し、そのプロパティにはアクセスしません。とにかくありがとう! – heuels

+1

だから 'get_AttachedTemplate'はあなたのために働かないのですか? – mjwills

+0

'get_AttachedTemplate()'を試してみるとコンパイルエラーを共有できますか? – mjwills

答えて

1

@mjwillsさんに大きな感謝をしてくれました。

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 { } 
    } 
} 

は、参考のためにMSDNのこの偉大な記事を参照してください:Retrieving Custom Building Blocks from Templates in Word 2007

関連する問題