C# Visio 2010 C实体自动化
如果之前有人问我这个问题,我很抱歉,但是在搜索了一段时间后,我找不到任何关于这个问题的具体答案 我在Visio2010中有一个ERD图。大约有15张桌子。为了让我们的DBA创建数据库,我必须将每一列的数据类型、主键和描述输出到excel工作表 我的第一次尝试只是简单地从形状属性复制并粘贴列定义表,但由于Microsoft!的原因,这无法工作!。在尝试了其他一些事情之后,我发现我必须为每个表手动复制每个单元格,这非常耗时 我求助于C和VisioInterop。现在,我可以将列定义导出到形状的文本属性中,但找不到保存表名的属性 有人知道哪个对象拥有这个属性,或者它是否可以访问吗C# Visio 2010 C实体自动化,c#,database,interop,entity,visio,C#,Database,Interop,Entity,Visio,如果之前有人问我这个问题,我很抱歉,但是在搜索了一段时间后,我找不到任何关于这个问题的具体答案 我在Visio2010中有一个ERD图。大约有15张桌子。为了让我们的DBA创建数据库,我必须将每一列的数据类型、主键和描述输出到excel工作表 我的第一次尝试只是简单地从形状属性复制并粘贴列定义表,但由于Microsoft!的原因,这无法工作!。在尝试了其他一些事情之后,我发现我必须为每个表手动复制每个单元格,这非常耗时 我求助于C和VisioInterop。现在,我可以将列定义导出到形状的文本属
谢谢最后我解决了它。我无法解析出标准的Visio drawing.vsd,因此选择了Visio XML drawing.vdx。最后,这对我起了作用: 其中path是vxd图形的文件路径。我发现XML绘图页面中的每个形状定义都有自己的两个形状。第一个形状保存实体名称,第二个形状保存实体列
XDocument xdoc = XDocument.Load(path);
var elements = xdoc.Elements().Elements();
XName pageXName = XName.Get("Page","http://schemas.microsoft.com/visio/2003/core");
var pages = elements.Elements(pageXName);
foreach (XElement page in pages)
{
XName shapeXName = XName.Get("Shape","http://schemas.microsoft.com/visio/2003/core");
var shapes = from shape in page.Elements().Elements(shapeXName)
where shape.Attribute("Type").Value == "Group"
select shape;
foreach (XElement shape in shapes)
{
var shapeShapes = shape.Elements();
List<XElement> textShapes = shapeShapes.Elements(shapeXName).ToList();
XName textXName = XName.Get("Text","http://schemas.microsoft.com/visio/2003/core");
XName cpXName = XName.Get("Text", "http://schemas.microsoft.com/visio/2003/core");
string tableName = textShapes[0].Elements(textXName).SingleOrDefault().Value;
string columns = textShapes[1].Elements(textXName).SingleOrDefault().Value;
Debug.WriteLine("-------------" + tableName.TrimEnd('\n') + "---------------");
Debug.Write(columns);
Debug.WriteLine("----------------------------");
}
}
最后我解决了它。我无法解析出标准的Visio drawing.vsd,因此选择了Visio XML drawing.vdx。最后,这对我起了作用: 其中path是vxd图形的文件路径。我发现XML绘图页面中的每个形状定义都有自己的两个形状。第一个形状保存实体名称,第二个形状保存实体列
XDocument xdoc = XDocument.Load(path);
var elements = xdoc.Elements().Elements();
XName pageXName = XName.Get("Page","http://schemas.microsoft.com/visio/2003/core");
var pages = elements.Elements(pageXName);
foreach (XElement page in pages)
{
XName shapeXName = XName.Get("Shape","http://schemas.microsoft.com/visio/2003/core");
var shapes = from shape in page.Elements().Elements(shapeXName)
where shape.Attribute("Type").Value == "Group"
select shape;
foreach (XElement shape in shapes)
{
var shapeShapes = shape.Elements();
List<XElement> textShapes = shapeShapes.Elements(shapeXName).ToList();
XName textXName = XName.Get("Text","http://schemas.microsoft.com/visio/2003/core");
XName cpXName = XName.Get("Text", "http://schemas.microsoft.com/visio/2003/core");
string tableName = textShapes[0].Elements(textXName).SingleOrDefault().Value;
string columns = textShapes[1].Elements(textXName).SingleOrDefault().Value;
Debug.WriteLine("-------------" + tableName.TrimEnd('\n') + "---------------");
Debug.Write(columns);
Debug.WriteLine("----------------------------");
}
}