1

これが以前に尋ねられた場合は申し訳ありませんが、しばらく検索した後、これに関する特定の回答が見つかりませんでした。

Visio 2010 に ERD ダイアグラムがあります。約 15 個のテーブルがあります。DBA にデータベースを作成してもらうために、データ型、主キー、説明を含む各列を Excel シートに出力する必要があります。

私の最初の試みは、形状のプロパティから列定義テーブルを単純にコピーして貼り付けることでしたが、これは機能しません (Microsoft に感謝します!)。他のいくつかのことを試した後、すべてのテーブルのすべてのセルを手動でコピーする必要があり、時間がかかることがわかりました。

私は C# と Visio Interop に助けを求めました。列定義をエクスポートできるようになりました (形状の Text プロパティにあります) が、テーブルの名前を保持するプロパティが見つかりません。

どのオブジェクトがこのプロパティを保持しているか、またはアクセス可能かどうかを知っている人はいますか?

ありがとうございました

4

1 に答える 1

1

結局、私はそれを解決しました。標準の Visio 図面 (.vsd) を解析できなかったため、Visio XML 図面 (.vdx) を選択しました。結局、これは私のために働いた:

path は、vxd 図面へのファイル パスです。XML 描画のページ内の各形状定義には、独自の 2 つの形状があることがわかりました。最初の形状はエンティティ名を保持し、2 番目の形状はエンティティ列を保持します。

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("----------------------------");

    }
}
于 2012-07-26T18:21:10.843 に答える