2017-11-20 6 views
0

C#을 사용하여 Visio.Shape 항목과 상호 작용하는 데 약간의 문제가 있습니다.C# 필드와 관련된 Visio.Shape 속성을 사용하는 방법

myShapeObj.Text를 할 때 페이지 내의 각 도형을 반복 할 수 있습니다. 올바른 텍스트를 다시 얻는 경향이 있습니다. 그러나 내 visio 문서는 사용자 정의 필드에 연결된 모양을 가지고 있습니다. 필드> 사용자 정의 Formuls = ThisDoc! User.mycustomproperty.

"02a", "03"등의 값을 가진 "User.mycustomproperty"라는 사용자 정의 셀이 있습니다 Visual Studio의 디버그 창에 표시 될 때 문자열 반환 값이 인식되지 않는 문자로 나타납니다. 값을 텍스트로 파싱 할 수 있습니까?

두 번째 관련 질문 : 이 사용자 정의 셀을 쉽게 가져올/설정하는 방법이 있습니까?

답변

1

모양의 텍스트에 액세스하는 주요 속성은 두 가지가 있습니다. 하나는 Shape.Text이고 다른 하나는 Shape.Characters입니다. 후자는 텍스트를 읽고 조작하기위한 여러 멤버가있는 Characters 개체를 반환합니다.

확장 된 필드를 포함하여 전체 텍스트를 반환하는 Characters.Text 속성이 있습니다. 이 같은 세 가지 형태가있는 경우

그래서 :

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

문자 : 모양 아니오 필드 1

텍스트 : 한 문서 필드 모양 2 ]

문자 : 한 문서 필드 모양 2 [02A]

텍스트 : 날짜 필드 모양 3 ]

문자 : 날짜 필드 [2017년 (월요일) 11월 20일 여기서

당신이 Shape.Text이 축소 된 필드를 반환하고 Shape.Characters.Text 확장 된 버전을 반환하는 것을 볼 수와 모양 3.

GetRunningVisio가 LinqPad로 사용하는 내 확장 방법입니다 것으로 도시 :

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

이 ...하지만 당신은 응용 프로그램 개체를 잡아 어떻게 당신에게 달려 있습니다. 나는 이런 식으로 뭔가를 할 것이다 사용자 세포를 설정하는 방법에 대한 두 번째 질문에 대한


:

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

우수, 땜질 및 조언의 약간의 비트, 나는 모든 것을 제압했습니다.이것은 정말 지루한 수작업으로 많은 시간을 절약 해주었습니다. – SamAPOC

관련 문제