c# – 如何在Visio中读取Shape的属性
发布时间:2020-12-15 03:53:24 所属栏目:百科 来源:网络整理
导读:我有以下任务.我正在Studio 2010中的C#上为Visio 2010编写一个加载项. 假设我打开了一个图表.我在这个图中有任何形状的形状(让我们尝试管理一个开头的形状).问题是如何阅读这种形状的任何属性?我应该使用哪种API? 基本算法: 扫描打开的文档以获取形状 如
我有以下任务.我正在Studio 2010中的C#上为Visio 2010编写一个加载项.
假设我打开了一个图表.我在这个图中有任何形状的形状(让我们尝试管理一个开头的形状).问题是如何阅读这种形状的任何属性?我应该使用哪种API? 基本算法: >扫描打开的文档以获取形状 (代码示例将不胜感激) 解决方法
我假设你通过属性引用Shape Data,它曾经在UI中被称为Custom Properties,并且在API中仍然知道该名称.
如果您不熟悉ShapeSheet,则应首先在ShapeSheet中查看具有自定义属性的形状,以查看属性的定义方式.请参阅“What happened to the ShapeSheet?”以了解如何在Visio 2010中打开Shapesheet. 以下示例程序应该可以帮助您入门.此示例假定您已在PC上安装了Visio Primary Interop Assembly,并且您已将裁判包含在项目中的Microsoft.Office.Interop.Visio中. namespace VisioEventsExample { using System; using Microsoft.Office.Interop.Visio; class Program { public static void Main(string[] args) { // Open up one of Visio's sample drawings. Application app = new Application(); Document doc = app.Documents.Open( @"C:Program FilesMicrosoft OfficeOffice14visio content1033ASTMGT_U.VST"); // Get the first page in the sample drawing. Page page = doc.Pages[1]; // Start with the collection of shapes on the page and // print the properties we find,printProperties(page.Shapes); } /* This function will travel recursively through a collection of * shapes and print the custom properties in each shape. * * The reason I don't simply look at the shapes in Page.Shapes is * that when you use the Group command the shapes you group become * child shapes of the group shape and are no longer one of the * items in Page.Shapes. * * This function will not recursive into shapes which have a Master. * This means that shapes which were created by dropping from stencils * will have their properties printed but properties of child shapes * inside them will be ignored. I do this because such properties are * not typically shown to the user and are often used to implement * features of the shapes such as data graphics. * * An alternative halting condition for the recursion which may be * sensible for many drawing types would be to stop when you * find a shape with custom properties. */ public static void printProperties(Shapes shapes) { // Look at each shape in the collection. foreach (Shape shape in shapes) { // Use this index to look at each row in the properties // section. short iRow = (short) VisRowIndices.visRowFirst; // While there are stil rows to look at. while (shape.get_CellsSRCExists( (short) VisSectionIndices.visSectionProp,iRow,(short) VisCellIndices.visCustPropsValue,(short) 0) != 0) { // Get the label and value of the current property. string label = shape.get_CellsSRC( (short) VisSectionIndices.visSectionProp,(short) VisCellIndices.visCustPropsLabel ).get_ResultStr(VisUnitCodes.visNoCast); string value = shape.get_CellsSRC( (short) VisSectionIndices.visSectionProp,(short) VisCellIndices.visCustPropsValue ).get_ResultStr(VisUnitCodes.visNoCast); // Print the results. Console.WriteLine(string.Format( "Shape={0} Label={1} Value={2}",shape.Name,label,value)); // Move to the next row in the properties section. iRow++; } // Now look at child shapes in the collection. if (shape.Master == null && shape.Shapes.Count > 0) printProperties(shape.Shapes); } } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |