C#操作PowerDesigner代码

首先,程序的界面如下:

这里一定要使用OpenFileDialog控件,然后该页面代码如下:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Xml;



namespace DBDesign

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }



        private void button1_Click(object sender, EventArgs e)

        {

            this.openFileDialog1.Filter = "pdm文件(*.pdm)|*.pdm";

            this.openFileDialog1.Multiselect = false;



            if (this.openFileDialog1.ShowDialog() == DialogResult.OK) 

            {

                this.label2.Text = this.openFileDialog1.FileName;

            }

        }



        private void button2_Click(object sender, EventArgs e)

        {

            try

            {

                PdmReader mTest = new PdmReader(this.label2.Text);

                Form2 f2 = new Form2(mTest, this.label2.Text);

                f2.Show();

                this.Visible = false;

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

        }



        private void Form1_FormClosed(object sender, FormClosedEventArgs e)

        {

            Application.Exit();

        }

    }

}

然后第二个页面界面如下:

 

这个界面的代码如下:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.IO;

using System.Windows.Forms;

using Microsoft.Office.Interop.Excel;



namespace DBDesign

{

    public partial class Form2 : Form

    {

        private PdmReader pr = new PdmReader();



        private string path = string.Empty;



        public Form2(PdmReader pr, string path)

        {

            InitializeComponent();



            this.pr = pr;

            this.path = path;

        }



        private void Form2_Load(object sender, EventArgs e)

        {

            pr.InitData();



            this.dataGridView1.AutoGenerateColumns = false;

            this.dataGridView1.DataSource = pr.Tables;



            string[] names = null;

            List<string> hms = new List<string>();

            List<string> res = null;

            for (int i = 0; names != null && i < names.Length; i++) 

            {

                string[] str = names[i].Split(new char[] { '!' }, StringSplitOptions.RemoveEmptyEntries);

                res = hms.FindAll(M => M.Equals(str[0].Substring(24)));

                if (!(res != null && res.Count > 0)) 

                {

                    hms.Add(str[0].Substring(24));

                }

            }

            foreach (string s in hms) 

            {

                this.comboBox1.Items.Add(s);

            }

        }



        private void button2_Click(object sender, EventArgs e)

        {

            this.Visible = false;

            Form1 f1 = new Form1();

            f1.Show();

        }



        private void Form2_FormClosed(object sender, FormClosedEventArgs e)

        {

            System.Windows.Forms.Application.Exit();

        }



        private void button3_Click(object sender, EventArgs e)

        {

            if (this.comboBox1.SelectedItem != null && !this.comboBox1.SelectedItem.Equals("")) 

            {

                FileInfo file = new FileInfo(path);

                if (!Directory.Exists("D:\\work\\Test\\XML\\" + file.Name.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries)[0])) 

                {

                    Directory.CreateDirectory("D:\\work\\Test\\XML\\" + file.Name.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries)[0]);

                }

                if (Directory.Exists("D:\\work\\Test\\XML\\" + file.Name.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries)[0] + "\\" + this.comboBox1.SelectedItem.ToString() + ".txt")) 

                {

                    File.Delete("D:\\work\\Test\\XML\\" + file.Name.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries)[0] + "\\" + this.comboBox1.SelectedItem.ToString() + ".txt");

                }

                string str = string.Empty;

                foreach (DataGridViewRow dr in this.dataGridView1.Rows) 

                {

                    if (dr.Cells[0].Value != null && int.Parse(dr.Cells[0].Value.ToString()) == 1)   

                    {

                        str += dr.Cells[1].Value.ToString() + "|";

                    }

                }

                if (str.Length > 0) 

                {

                    str = str.Substring(0, str.Length - 1);

                }

                FileStream fs = new FileStream("D:\\work\\Test\\XML\\" + file.Name.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries)[0] + "\\" + this.comboBox1.SelectedItem.ToString() + ".txt", FileMode.Create);

                StreamWriter sw = new StreamWriter(fs);

                sw.Write(str);

                sw.Flush();

                sw.Close();

                fs.Close();

            }

        }



        private void button1_Click(object sender, EventArgs e)

        {

            int n = 1;

            FileInfo file = new FileInfo(path);

            Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.ApplicationClass();

            app.Visible = false;

            Workbook wb = app.Workbooks.Add(true);

            Worksheet ws = (Worksheet)wb.ActiveSheet;

            ws.Name = "所有表";

            ((Microsoft.Office.Interop.Excel.Range)ws.Columns["B", Type.Missing]).ColumnWidth = 25.50;

            ((Microsoft.Office.Interop.Excel.Range)ws.Columns["A", Type.Missing]).HorizontalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter;

            ((Microsoft.Office.Interop.Excel.Range)ws.Columns["E", Type.Missing]).HorizontalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter;

            ((Microsoft.Office.Interop.Excel.Range)ws.Columns["F", Type.Missing]).HorizontalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter;

            ((Microsoft.Office.Interop.Excel.Range)ws.Columns["C", Type.Missing]).ColumnWidth = 43.50;

            ((Microsoft.Office.Interop.Excel.Range)ws.Columns["D", Type.Missing]).ColumnWidth = 10.00;

            ((Microsoft.Office.Interop.Excel.Range)ws.Columns["E", Type.Missing]).ColumnWidth = 8.50;

            ((Microsoft.Office.Interop.Excel.Range)ws.Columns["F", Type.Missing]).ColumnWidth = 8.50;

            Range r = ws.get_Range(ws.Cells[1,1],ws.Cells[1,6]);

            r.Interior.ColorIndex = 37;

            r.Font.Size = 12;

            r.Font.Bold = true;

            Borders borders = r.Borders;

            borders.LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;

            ws.Cells[n, 1] = "序号";

            ws.Cells[n, 2] = "表名";

            ws.Cells[n, 3] = "表说明";

            ws.Cells[n, 4] = "字段类型";

            ws.Cells[n, 5] = "长度";

            ws.Cells[n, 6] = "允许空";



            n = 2;



            List<string> list = new List<string>();

            for (int i = 0; i < this.dataGridView1.Rows.Count; i++)

            {

                DataGridViewRow dr = this.dataGridView1.Rows[i];

                string str = dr.Cells[1].Value.ToString();

                if (dr.Cells["cbxTable"].Value != null && dr.Cells["cbxTable"].Value.ToString().Equals("1")) 

                {

                    list.Add(dr.Cells[1].Value.ToString());

                }

            }



            foreach (TableInfo table in pr.Tables) 

            {

                bool print = false;

                if (this.checkBox1.Checked)

                {

                    print = true;

                }

                else 

                {

                    foreach (string s in list) 

                    {

                        if (s.Equals(table.Code)) 

                        {

                            print = true;

                        }

                    }

                }

                if (print) 

                {

                    Range rt = ws.get_Range(ws.Cells[n, 1], ws.Cells[n, 6]);

                    rt.Interior.ColorIndex = 35;

                    rt.Font.Size = 12;

                    Borders border = rt.Borders;

                    border.LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;

                    ws.Cells[n, 1] = "T";

                    ws.Cells[n, 2] = table.Code;

                    ws.Cells[n, 3] = table.Comment;

                    ws.Cells[n, 4] = "";

                    ws.Cells[n, 5] = "";

                    ws.Cells[n, 6] = "";



                    n = n + 1;



                    for (int i = 0; i < table.Columns.Count; i++)

                    {

                        Range rtc = ws.get_Range(ws.Cells[n, 1], ws.Cells[n, 6]);

                        rtc.Font.Size = 12;

                        Borders borderc = rtc.Borders;

                        borderc.LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;

                        ws.Cells[n, 1] = i + 1;

                        ws.Cells[n, 2] = table.Columns[i].Code;

                        ws.Cells[n, 3] = table.Columns[i].Comment;

                        ws.Cells[n, 4] = table.Columns[i].DataType.Contains("(") ? table.Columns[i].DataType.Split(new char[] { '(' }, StringSplitOptions.RemoveEmptyEntries)[0] : table.Columns[i].DataType;

                        if (table.Columns[i].DataType.Equals("int"))

                        {

                            ws.Cells[n, 5] = 10;

                        }

                        else if (table.Columns[i].DataType.Equals("datetime"))

                        {

                            ws.Cells[n, 5] = 23;

                        }

                        else

                        {

                            ws.Cells[n, 5] = table.Columns[i].Length;

                        }

                        ws.Cells[n, 6] = table.Columns[i].Mandatory ? "" : "";



                        if (table.Primary != null) 

                        {

                            foreach (string pk in table.Primary)

                            {

                                if (pk.Equals(table.Columns[i].ColumnId))

                                {

                                    rtc.Interior.ColorIndex = 6;

                                }

                            }

                        }



                        n = n + 1;

                    }

                }

            }



            wb.Saved = true;

            app.ActiveWorkbook.SaveCopyAs("D:\\Test.xlsx");

            MessageBox.Show("over!");

        }

    }

}

然后这里还用到了四个别的类,分别列举一下:

1.TableInfo.cs

using System;

using System.Collections.Generic;

using System.Text;



namespace DBDesign

{

    //表信息

    public class TableInfo

    {

        public TableInfo()

        {

        }

        string tableId;



        public string TableId

        {

            get { return tableId; }

            set { tableId = value; }

        }

        string objectID;



        public string ObjectID

        {

            get { return objectID; }

            set { objectID = value; }

        }

        string name;



        public string Name

        {

            get { return name; }

            set { name = value; }

        }

        string code;



        public string Code

        {

            get { return code; }

            set { code = value; }

        }

        int creationDate;



        public int CreationDate

        {

            get { return creationDate; }

            set { creationDate = value; }

        }

        string creator;



        public string Creator

        {

            get { return creator; }

            set { creator = value; }

        }

        int modificationDate;



        public int ModificationDate

        {

            get { return modificationDate; }

            set { modificationDate = value; }

        }

        string modifier;



        public string Modifier

        {

            get { return modifier; }

            set { modifier = value; }

        }

        string comment;



        public string Comment

        {

            get { return comment; }

            set { comment = value; }

        }



        string physicalOptions;



        public string PhysicalOptions

        {

            get { return physicalOptions; }

            set { physicalOptions = value; }

        }





        IList<ColumnInfo> columns;



        public IList<ColumnInfo> Columns

        {

            get { return columns; }

        }



        IList<PdmKey> keys;



        public IList<PdmKey> Keys

        {

            get { return keys; }

        }



        IList<string> primary;



        public IList<string> Primary

        {

            get { return primary; }

            set { primary = value; }

        }



        public void AddColumn(ColumnInfo mColumn)

        {

            if (columns == null)

                columns = new List<ColumnInfo>();

            columns.Add(mColumn);

        }



        public void AddKey(PdmKey mKey)

        {

            if (keys == null)

                keys = new List<PdmKey>();

            keys.Add(mKey);

        }



        public void AddPrimary(string id) 

        {

            if (primary == null)

                primary = new List<string>();

            primary.Add(id);

        }

    }



}

2.PdmReader.cs

using System;

using System.Collections.Generic;

using System.Text;

using System.Xml;



namespace DBDesign

{

    public class PdmReader

    {

        public const string a = "attribute", c = "collection", o = "object";



        public const string cClasses = "c:Classes";

        public const string oClass = "o:Class";



        public const string cAttributes = "c:Attributes";

        public const string oAttribute = "o:Attribute";



        public const string cTables = "c:Tables";

        public const string oTable = "o:Table";



        public const string cColumns = "c:Columns";

        public const string oColumn = "o:Column";





        XmlDocument xmlDoc;

        XmlNamespaceManager xmlnsManager;

        /// <summary>构造函数 </summary>

        public PdmReader()

        {

            // TODO: 在此处添加构造函数逻辑

            xmlDoc = new XmlDocument();

        }

        /// <summary>构造函数 </summary>

        public PdmReader(string pdm_file)

        {

            PdmFile = pdm_file;

        }



        string pdmFile;



        public string PdmFile

        {

            get { return pdmFile; }

            set

            {

                pdmFile = value;

                if (xmlDoc == null)

                {

                    xmlDoc = new XmlDocument();

                    xmlDoc.Load(pdmFile);

                    xmlnsManager = new XmlNamespaceManager(xmlDoc.NameTable);

                    xmlnsManager.AddNamespace("a", "attribute");

                    xmlnsManager.AddNamespace("c", "collection");

                    xmlnsManager.AddNamespace("o", "object");

                }

            }

        }



        IList<TableInfo> tables;



        public IList<TableInfo> Tables

        {

            get { return tables; }

            set { tables = value; }

        }



        public void InitData()

        {

            if (Tables == null)

                Tables = new List<TableInfo>();

            XmlNode xnTables = xmlDoc.SelectSingleNode("//" + cTables, xmlnsManager);

            foreach (XmlNode xnTable in xnTables.ChildNodes)

            {

                Tables.Add(GetTable(xnTable));

            }

        }



        //初始化"o:Table"的节点

        private TableInfo GetTable(XmlNode xnTable)

        {

            TableInfo mTable = new TableInfo();

            XmlElement xe = (XmlElement)xnTable;

            mTable.TableId = xe.GetAttribute("Id");

            XmlNodeList xnTProperty = xe.ChildNodes;

            foreach (XmlNode xnP in xnTProperty)

            {

                switch (xnP.Name)

                {

                    case "a:ObjectID": mTable.ObjectID = xnP.InnerText;

                        break;

                    case "a:Name": mTable.Name = xnP.InnerText;

                        break;

                    case "a:Code": mTable.Code = xnP.InnerText;

                        break;

                    case "a:CreationDate": mTable.CreationDate = Convert.ToInt32(xnP.InnerText);

                        break;

                    case "a:Creator": mTable.Creator = xnP.InnerText;

                        break;

                    case "a:ModificationDate": mTable.ModificationDate = Convert.ToInt32(xnP.InnerText);

                        break;

                    case "a:Modifier": mTable.Modifier = xnP.InnerText;

                        break;

                    case "a:Comment": mTable.Comment = xnP.InnerText;

                        break;

                    case "a:PhysicalOptions": mTable.PhysicalOptions = xnP.InnerText;

                        break;

                    case "c:Columns": InitColumns(xnP, mTable);

                        break;

                    case "c:Keys": InitKeys(xnP, mTable);

                        break;

                    case "c:PrimaryKey": InitPrimary(xnP, mTable);

                        break;

                }

            }

            return mTable;

        }

        //初始化"c:Columns"的节点

        private void InitColumns(XmlNode xnColumns, TableInfo pTable)

        {

            foreach (XmlNode xnColumn in xnColumns)

            {

                pTable.AddColumn(GetColumn(xnColumn));

            }

        }



        //初始化c:Keys"的节点

        private void InitKeys(XmlNode xnKeys, TableInfo pTable)

        {

            foreach (XmlNode xnKey in xnKeys)

            {

                pTable.AddKey(GetKey(xnKey));

            }

        }



        //初始化c:PrimaryKey的节点

        private void InitPrimary(XmlNode xnKeys, TableInfo pTable) 

        {

            foreach (XmlNode xnKey in xnKeys)

            {

                PdmKey key = GetPrimary(xnKey);

                foreach (PdmKey pk in pTable.Keys) 

                {

                    if (pk.KeyId.Equals(key.KeyId)) 

                    {

                        foreach (ColumnInfo ci in pk.Columns) 

                        {

                            pTable.AddPrimary(ci.ColumnId);

                        }

                    }

                }

            }

        }



        private ColumnInfo GetColumn(XmlNode xnColumn)

        {

            ColumnInfo mColumn = new ColumnInfo();

            XmlElement xe = (XmlElement)xnColumn;

            mColumn.ColumnId = xe.GetAttribute("Id");

            XmlNodeList xnCProperty = xe.ChildNodes;

            foreach (XmlNode xnP in xnCProperty)

            {

                switch (xnP.Name)

                {

                    case "a:ObjectID": mColumn.ObjectID = xnP.InnerText;

                        break;

                    case "a:Name": mColumn.Name = xnP.InnerText;

                        break;

                    case "a:Code": mColumn.Code = xnP.InnerText;

                        break;

                    case "a:CreationDate": mColumn.CreationDate = Convert.ToInt32(xnP.InnerText);

                        break;

                    case "a:Creator": mColumn.Creator = xnP.InnerText;

                        break;

                    case "a:ModificationDate": mColumn.ModificationDate = Convert.ToInt32(xnP.InnerText);

                        break;

                    case "a:Modifier": mColumn.Modifier = xnP.InnerText;

                        break;

                    case "a:Comment": mColumn.Comment = xnP.InnerText;

                        break;

                    case "a:DataType": mColumn.DataType = xnP.InnerText;

                        break;

                    case "a:Length": mColumn.Length = xnP.InnerText;

                        break;

                    case "a:Identity": mColumn.Identity = xnP.InnerText.Equals("Yes") ? true : false;

                        break;

                    case "a:Mandatory": mColumn.Mandatory = xnP.InnerText.Equals("1") ? true : false;

                        break;

                    case "a:PhysicalOptions": mColumn.PhysicalOptions = xnP.InnerText;

                        break;

                    case "a:ExtendedAttributesText": mColumn.ExtendedAttributesText = xnP.InnerText;

                        break;

                }

            }

            return mColumn;

        }



        private PdmKey GetKey(XmlNode xnKey)

        {

            PdmKey mKey = new PdmKey();

            XmlElement xe = (XmlElement)xnKey;

            mKey.KeyId = xe.GetAttribute("Id");

            XmlNodeList xnKProperty = xe.ChildNodes;

            foreach (XmlNode xnP in xnKProperty)

            {

                switch (xnP.Name)

                {

                    case "a:ObjectID": mKey.ObjectID = xnP.InnerText;

                        break;

                    case "a:Name": mKey.Name = xnP.InnerText;

                        break;

                    case "a:Code": mKey.Code = xnP.InnerText;

                        break;

                    case "a:CreationDate": mKey.CreationDate = Convert.ToInt32(xnP.InnerText);

                        break;

                    case "a:Creator": mKey.Creator = xnP.InnerText;

                        break;

                    case "a:ModificationDate": mKey.ModificationDate = Convert.ToInt32(xnP.InnerText);

                        break;

                    case "a:Modifier": mKey.Modifier = xnP.InnerText;

                        break;

                    //还差 <c:Key.Columns>

                    case "c:Key.Columns": GetKeyColumn(xnP, mKey);

                        break;

                }

            }

            return mKey;

        }



        public void GetKeyColumn(XmlNode xnP ,PdmKey mKey) 

        {

            XmlElement xe = (XmlElement)xnP;

            XmlNodeList nodeList = xe.ChildNodes;

            foreach (XmlNode node in nodeList) 

            {

                ColumnInfo ci = new ColumnInfo();

                ci.ColumnId = ((XmlElement)node).GetAttribute("Ref");

                mKey.AddColumn(ci);

            }

        }



        private PdmKey GetPrimary(XmlNode xnKey) 

        {

            PdmKey mKey = new PdmKey();

            XmlElement xe = (XmlElement)xnKey;

            mKey.KeyId = xe.GetAttribute("Ref");

            return mKey;

        }

    }



}

3.PdmKey.cs

using System;

using System.Collections.Generic;

using System.Text;



namespace DBDesign

{

    public class PdmKey

    {

        public PdmKey()

        {

        }



        string keyId;



        public string KeyId

        {

            get { return keyId; }

            set { keyId = value; }

        }

        string objectID;



        public string ObjectID

        {

            get { return objectID; }

            set { objectID = value; }

        }

        string name;



        public string Name

        {

            get { return name; }

            set { name = value; }

        }

        string code;



        public string Code

        {

            get { return code; }

            set { code = value; }

        }

        int creationDate;



        public int CreationDate

        {

            get { return creationDate; }

            set { creationDate = value; }

        }

        string creator;



        public string Creator

        {

            get { return creator; }

            set { creator = value; }

        }

        int modificationDate;



        public int ModificationDate

        {

            get { return modificationDate; }

            set { modificationDate = value; }

        }

        string modifier;



        public string Modifier

        {

            get { return modifier; }

            set { modifier = value; }

        }



        IList<ColumnInfo> columns;



        public IList<ColumnInfo> Columns

        {

            get { return columns; }

        }



        public void AddColumn(ColumnInfo mColumn)

        {

            if (columns == null)

                columns = new List<ColumnInfo>();

            columns.Add(mColumn);

        }

    }



}

4.ColumnInfo.cs

using System;

using System.Collections.Generic;

using System.Text;



namespace DBDesign

{

    public class ColumnInfo

    {

        public ColumnInfo()

        { }



        string columnId;



        public string ColumnId

        {

            get { return columnId; }

            set { columnId = value; }

        }

        string objectID;



        public string ObjectID

        {

            get { return objectID; }

            set { objectID = value; }

        }

        string name;



        public string Name

        {

            get { return name; }

            set { name = value; }

        }

        string code;



        public string Code

        {

            get { return code; }

            set { code = value; }

        }

        int creationDate;



        public int CreationDate

        {

            get { return creationDate; }

            set { creationDate = value; }

        }

        string creator;



        public string Creator

        {

            get { return creator; }

            set { creator = value; }

        }

        int modificationDate;



        public int ModificationDate

        {

            get { return modificationDate; }

            set { modificationDate = value; }

        }

        string modifier;



        public string Modifier

        {

            get { return modifier; }

            set { modifier = value; }

        }

        string comment;



        public string Comment

        {

            get { return comment; }

            set { comment = value; }

        }

        string dataType;



        public string DataType

        {

            get { return dataType; }

            set { dataType = value; }

        }

        string length;



        public string Length

        {

            get { return length; }

            set { length = value; }

        }

        //是否自增量

        bool identity;



        public bool Identity

        {

            get { return identity; }

            set { identity = value; }

        }

        bool mandatory;

        //禁止为空

        public bool Mandatory

        {

            get { return mandatory; }

            set { mandatory = value; }

        }

        string extendedAttributesText;

        //扩展属性

        public string ExtendedAttributesText

        {

            get { return extendedAttributesText; }

            set { extendedAttributesText = value; }

        }

        string physicalOptions;



        public string PhysicalOptions

        {

            get { return physicalOptions; }

            set { physicalOptions = value; }

        }

    }



}

 

你可能感兴趣的:(powerDesigner)