2017-11-20 6 views
0

Ich habe ein paar Probleme mit der Interaktion mit Visio.Shape-Elementen mit C#.C# Verwendung von Visio.Shape-Eigenschaften im Zusammenhang mit Feldern

Ich bin in der Lage, jede Form innerhalb einer Seite zu durchlaufen, wenn ich myShapeObj.Text mache, neige ich dazu, den richtigen Text zurück zu bekommen. Mein visio-Dokument hat jedoch die Form, die mit einem benutzerdefinierten Feld verknüpft ist. Felder> Benutzerdefinierte Formulare = ThisDoc! User.mycustyproperty.

Ich habe eine benutzerdefinierte Zelle namens "User.mycustyproperty", die einen Wert wie "02a", "03" usw. enthält Die Zeichenfolge kehrt als nicht erkanntes Zeichen in Visual Studio Debug-Fenster angezeigt. Ist es möglich, den Wert als Text zu analysieren?

Auch eine zweite verwandte Frage: Gibt es eine einfache Möglichkeit, diese benutzerdefinierte Zelle zu erhalten/setzen?

Antwort

1

Es gibt zwei Haupteigenschaften für den Zugriff auf den Text einer Form: Einer ist Shape.Text, wie Sie wissen, und der andere ist Shape.Characters. Letzterer gibt ein Characters Objekt zurück, das eine Anzahl von Elementen zum Lesen und Manipulieren des Textes aufweist.

Unter diesen ist eine Characters.Text -Eigenschaft, die den gesamten Text einschließlich der erweiterten Felder zurückgibt.

Also, wenn Sie drei Formen wie dieses:

enter image description here

... und dann diesen Code ausführen:

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"); 
    } 
} 

... erhalten Sie die folgende Ausgabe:

Text: Form 1 ohne Feld

Charaktere: Form 1 ohne Feld

Text: Form 2 mit einer doc Feld []

Characters: Form 2 mit einer doc Feld [02a]

Text: Form 3 mit Datumzeit Feld []

Charaktere: Form 3 mit Datetime-Feld [Montag 20. November Jahr 2017]

Hier können Sie sehen, dass Shape.Text die kollabierte Feld zurück und Shape.Characters.Text gibt die erweiterte Version.

Beachten Sie, dass GetRunningVisio ist meine Erweiterungsmethode mit LinqPad für die Anwendung:

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

... aber es ist an Ihnen, wie Sie halten das Anwendungsobjekt erhalten.


Für Ihre zweite Frage zu User-Zellen einstellen, dann würde ich so etwas tun:

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

ausgezeichnet, mit einem leicht bisschen Bastelei und Ihrem Rat, ich habe es geschaffen, alles zu sortieren.Das hat mir so viel Zeit erspart, wirklich mühsame manuelle Aufgaben zu erledigen – SamAPOC

Verwandte Themen