2017-11-20 12 views
0

C#を使用してVisio.Shapeアイテムとやりとりする際にいくつか問題があります。c#フィールドに関連するVisio.Shapeプロパティの使用方法

私はmyShapeObj.Textを行うと、正しいテキストを返す傾向があるときに、ページ内の各図形をループすることができます。しかし、私のvisioドキュメントは、カスタムフィールドにリンクされたシェイプを持っています。 フィールド>カスタムFormuls = ThisDoc!User.mycustomproperty。

「02a」、「03」などの値を保持する「User.mycustomproperty」というセルがあります Visual Studioのデバッグウィンドウに表示される文字列の戻り値は、認識されない文字として表示されます。 値をテキストとして解析できますか?

また、2番目の関連する質問: このユーザー定義のセルを簡単に取得/設定する方法はありますか?

答えて

1

シェイプのテキストにアクセスするための主なプロパティは2つあります.1つはShape.Text、もう1つはShape.Charactersです。後者は、Charactersオブジェクトを返します。このオブジェクトには、テキストを読み込んで操作するためのメンバーが多数存在します。

これらのうち、拡張フィールドを含むテキスト全体を返すCharacters.Textプロパティがあります。あなたはこのような3つの形状がある場合

ので、:

enter image description here

を...そして、このコードを実行します。

void Main() 
{ 
    var vApp = MyExtensions.GetRunningVisio(); 
    var vPag = vApp.ActivePage; 
    foreach (Visio.Shape shp in vPag.Shapes) 
    { 
     Console.WriteLine($"Text: {shp.Text} \nCharacters: {shp.Characters.Text}\n"); 
    } 
} 

を...あなたは次のような出力が得られます。

テキスト:フィールドなしの形状1

文字:シェイプDOCフィールド有する形状2 []

文字:DOCフィールド有する形状2 [02A]

本文:日時フィールドと形状3 []

ないフィールド

テキストを1

文字:日時フィールドを持つ形状3 [2017年11月20日(月曜日)]

ここでは、Shape.Textが折りたたまフィールドを返し、Shape.Characters.Textが拡張バージョンを返すことがわかります。

http://visualsignals.typepad.co.uk/vislog/2015/12/getting-started-with-c-in-linqpad-with-visio.html

...しかし、それはあなたがアプリケーションオブジェクトのホールドを取得する方法あなた次第です:GetRunningVisioはLinqPadで使用するための私の拡張メソッドであることを

注意。その後、私はこのような何かをするだろうユーザセルの設定についてのあなたの2番目の質問については


const string targetCellName = "User.mycustomproperty"; 
var docSheet = vDoc.DocumentSheet; 
if (docSheet.CellExistsU[targetCellName, (short)0] != 0) 
{ 
    vDoc.DocumentSheet.CellsU[targetCellName].FormulaU = @"=""04a"""; 
} 
+0

優れ、工夫やアドバイスのわずかなビットで、私はすべてを並べ替えることができました。これは、本当に退屈な手作業をしていて、時間を節約しました。 – SamAPOC

関連する問題