1

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

代码

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];
4

3 回答 3

2

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

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;
于 2012-07-29T10:47:50.217 回答
0

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

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);
        }
    }
}
于 2012-07-29T21:41:09.593 回答
-1

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

于 2017-03-07T07:04:33.030 回答