如果之前有人问过这个问题,我很抱歉,但在搜索了一段时间后,我找不到任何关于这个问题的具体答案。
我在Visio 2010中有一个ERD图表。它大约有15张桌子。为了让我们的DBA创建数据库,我必须使用数据类型、主键、描述将每个列输出到excel工作表。
我的第一个尝试是简单地从形状属性复制并粘贴列定义表,但这不起作用(感谢Microsoft!)。在尝试了其他一些方法之后,我发现我必须手动复制每个表格的每个单元格-这很耗时。
我向C#和Visio Interop寻求帮助。我现在可以导出列定义(它们在形状的Text属性中),但我找不到保存表名称的属性。
有没有人知道哪个对象拥有这个属性,或者它是否可以访问?
谢谢
发布于 2012-07-26 18:21:11
最后我解决了这个问题。我无法解析出标准的Visio绘图(.vsd),因此我选择了Visio XML绘图(.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("----------------------------");
}
}
https://stackoverflow.com/questions/11475099
复制相似问题