2012-02-27 25 views
4

新しいVisioドキュメントを作成し、四角形を追加するこのコードを使用します。それは動作しますが、Mastersコレクションを入手するために別のドキュメントを開く必要はありません。問題は、新しい文書に空のマスターシェイプコレクションがあることです。 Documentクラスで、Mastersコレクションにシェイプを追加するメソッドや、既存のドキュメントがあると仮定してシェイプを追加するためのすべての例を見つけることができませんでした。私がしたいことをするためのより良い方法はありますか?新しいVisioドキュメントに図形を追加する

// create the new application 
Visio.Application va = new Microsoft.Office.Interop.Visio.Application(); 

     // add a document 
     va.Documents.Add(@""); 

     // Visio.Documents vdocs = va.Documents; 

     // we need this document to get its Masters shapes collection 
     // since our new document has none 
     Visio.Document vu = vdocs.OpenEx(@"C:\Program Files (x86)\Microsoft  Office\Office12\1033\Basic_U.vss", (short)Microsoft.Office.Interop.Visio.VisOpenSaveArgs.visOpenDocked); 

     // set the working document to our new document 
     Visio.Document vd = va.ActiveDocument; 

     // set the working page to the active page 
     Microsoft.Office.Interop.Visio.Page vp = va.ActivePage; 

     // if we try this from the Masters collection from our new document 
     // we get a run time since our masters collection is empty 
    Visio.Master vm = vu.Masters.get_ItemU(@"Rectangle"); 
    Visio.Shape visioRectShape = vp.Drop(vm, 4.25, 5.5); 
     visioRectShape.Text = @"Rectangle text."; 

答えて

5

MastersコレクションはReadOnlyです。ドキュメントは通常、空のマスターコレクションから始まります。ステンシルドキュメントからマスターを削除すると、コレクションが作成されます。

事前設定済みのマスターコレクションを使用して新しいドキュメントを作成する場合は、独自のテンプレート(.vst)を作成し、新しいドキュメントのベースにすることができます。たとえば、次のように

Visio.Document vDoc = vDocs.Add("MyTemplateFile.vst"); 

通常、あなたが一緒にあなたのステンシルやテンプレートをパッケージうと、常にそれぞれのステンシル文書(.VSS)からマスターをドロップして図形を作成します。

マスターにはMatchByNameプロパティもあります。このプロパティがtrueに設定されているときにマスタを削除すると、Visioはまず、マスタの図面ドキュメントマスターコレクションに存在することを確認します。そのマスターのインスタンスを実行すると、ドロップされます。そうでない場合は、元のステンシルに基づいて新しいマスターが追加されます。詳細については、これら二つのリンクを見てください:

あなたが本当にコードで独自のマスターを作成したい場合は、あなたがあなた自身の図形をドロップする/描くことができますページを開き、Document.Dropメソッドを使用してmastersコレクションに追加します。

また、名前でマスターを使用する場合は、マスターコレクションをループして使用前にチェックする必要があります。

+0

ありがとう。まともなフォーラムやVisioドキュメントをプログラマチックに生成するための優れたリソースをご存じですか?私はこの昨日、数時間を費やして、ほとんどが自分のやり方を不安定にしました。私はまだいくつかの質問があります。どのような接続ポイントがどのような形状を持っているのか、そしてどのように特定の接続ポイントに対処できるのでしょうか? –

+2

これらの2つのリンクを確認してください [プロセスフロー間の接続を分析する - VisGuy.com](http://www.visguy.com/2009/04/22/analyze-connectivity-between-process-flows/) [Visioを作成するプログラミングフローチャート - VisGuy.com](http://www.visguy.com/2006/09/13/create-visio-flowcharts-programmatically/) – JohnGoldsmith

+1

また、特定の順序で: [Visio Automation - Saveen Reddy on CodePlex](http://visioautomation.codeplex.com/) [Visio Guy forum](http://visguy.com/vgforum/index.php) [TechNet](http://social.technet.microsoft.com) [Visioソリューションの開発 - 古くは偉大なリソース](http://msdn.microsoft.com/en-us/library/aa245244%28office.10%29.aspx ) [Visio 2010 SDK]( http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=12365) と包括的なリストについては、[VisGuy.comのリンクセクション](http ://www.visguy。com/visio-links /) – JohnGoldsmith

関連する問題