首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从visio自动化中获取泳道形状对象中的形状?

如何从visio自动化中获取泳道形状对象中的形状?
EN

Stack Overflow用户
提问于 2012-07-28 18:48:24
回答 3查看 1.9K关注 0票数 1

我使用办公室自动化将visio文件转换为指定的xml格式流程图,我需要使用泳道数据作为工作流过程的容器。那么我如何才能得到工作流形状和泳道之间的关系呢?

代码语言:javascript
复制
IVisio.Shape shape = o as IVisio.Shape;

double width = shape.Cells["Width"]
        .Result[Microsoft.Office.Interop.Visio.VisUnitCodes.visMillimeters];
double height = shape.Cells["Height"]
        .Result[Microsoft.Office.Interop.Visio.VisUnitCodes.visMillimeters];
double pinX = shape.Cells["PinX"]
        .Result[Microsoft.Office.Interop.Visio.VisUnitCodes.visMillimeters];
double pinY = shape.Cells["PinY"]
        .Result[Microsoft.Office.Interop.Visio.VisUnitCodes.visMillimeters];
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-29 21:41:09

要查找容器关系,可以使用此方法使用API:

代码语言:javascript
复制
public class ShapeWrapper
{
    public IVisio.Shape Shape { get; set; }

    private List<ShapeWrapper> children = new List<ShapeWrapper>();
    public List<ShapeWrapper> Children { get { return this.children; } }

    public ShapeWrapper(IVisio.Shape shape)
    {
        Shape = shape;
    }
}

private void FindChildren(ShapeWrapper shapeWrapper, 
                              List<IVisio.Shape> addedShapes)
{
    IVisio.Selection children = shapeWrapper
       .Shape.SpatialNeighbors[
            (short)IVisio.VisSpatialRelationCodes.visSpatialContain, 
            0,
            (short)IVisio.VisSpatialRelationFlags.visSpatialFrontToBack];

    foreach (IVisio.Shape child in children)
    {
        if (!addedShapes.Contains(child))
        {
             //MessageBox.Show(child.Text);
             ShapeWrapper childWrapper = new ShapeWrapper(child);
             shapeWrapper.Children.Add(childWrapper);

             FindChildren(childWrapper, addedShapes);
        }
    }
}
票数 0
EN

Stack Overflow用户

发布于 2012-07-29 10:47:50

返回与传入和传出连接相关联的形状ID。

代码语言:javascript
复制
using Visio = Microsoft.Office.Interop.Visio;
visioObj = (Visio.Application)                  
     System.Runtime.InteropServices.Marshal.GetActiveObject("Visio.Application");

Array ids = shape.ConnectedShapes(Visio.VisConnectedShapesFlags
        .visConnectedShapesAllNodes, "");

// Using first item and get name   
string name = visioObj.ActivePage.Shapes[ids.GetValue(0)].Name;
票数 2
EN

Stack Overflow用户

发布于 2017-03-07 07:04:33

使用PackagePart的数据创建XML文档。您需要特别注意控制所创建的特定XML文档类型的架构的XML名称空间。创建一个包含XML的新文件并将该文件保存到包中的某个位置。在新的PackagePart和包或其他PackagePart对象之间创建必要的关系。您将更新任何需要引用新部件的现有部件。例如,如果向文件中添加了一个新的(一个新页面),还需要更新pages.xml部分(/visio/ page /pages.xml文件),以包含有关新页的正确信息。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11703719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档