• 将Excel的数据库字典导到PDM中


    Excel格式

    导入代码

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Xml.Linq;
    using System.Xml;
    using System.Data.OleDb;
    namespace ExcelUnionPDM
    {
        public partial class frmMain : Form
        {
            const string C_ExcelConnTmp = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= {0};Extended Properties='Excel 8.0;HDR=YES;IMEX=1';";
            public string ExcelFile
            {
                get { return @"D:\workspace\doc\系统字典.xls"; }
            }
            public string Sheet
            {
                get
                {
                    return "数据表$";
                }
            }
            public string ExcelConnectString
            {
                get
                {
                    return string.Format(C_ExcelConnTmp, ExcelFile);
                }
            }
    
            public new List<TableInfo> Tables
            {
                get;
                private set;
            }
            string C_PDMFile = @"D:\workspace\doc\JLMFG.pdm";
            string C_PDMFile_New = @"D:\workspace\doc\JLMFG2.pdm";
            public frmMain()
            {
                InitializeComponent();
            }
    
            private void btnImport_Click(object sender, EventArgs e)
            {
    
                LoadExcelTableInfo();
                SyncData();
                MessageBox.Show("OK!");
    
            }
            private void SyncData()
            {
                var doc = XDocument.Load(C_PDMFile);
                var tables = doc.Descendants().Where(ent => ent.Name.LocalName == "Table" && ent.Attribute("Id") != null).ToList();
    
                XNamespace aw = "attribute";
                XNamespace ow = "object";
    
                foreach (var table in tables)
                {
                    var tableCode=table.Element(aw+"Code").Value.Trim();
                    var findTable= Tables.Find(ent => string.Compare(ent.Code, tableCode, true) == 0);
    
                    if (findTable == null) continue;
    
                    table.Element(aw + "Name").SetValue(findTable.Name);
    
    
                    var columns = table.Descendants(ow + "Column").ToList();
    
                    //扫描列
                    foreach (var column in columns.Where(ent => ent.Attribute("Id") != null))
                    {
                        var columnCode = column.Element(aw + "Code").Value.ToString();
                        var findColumn = findTable.Columns.Find(ent => string.Compare(ent.Code, columnCode, true) == 0);
                        if (findColumn == null) continue;
    
                        if (findColumn.NeedSync)
                        {
                            if (column.Element(aw + "Comment") == null)
                            {
                                column.Add(new XElement(aw + "Comment", findColumn.Comment));
                            }
                            else
                            {
                                column.Element(aw + "Comment").SetValue(findColumn.Comment);
                            }
                            column.Element(aw + "Name").SetValue(findColumn.Name);
    
                        }
    
                    }
    
    
                }
           
    
    
                doc.Save(C_PDMFile_New);
            }
            private void LoadExcelTableInfo()
            {
    
                Tables = new List<TableInfo>();
    
                var ds = LoadExcelData();
    
                TableInfo curTable=null;
                for (int i = 1; i < ds.Tables[0].Rows.Count; i++)
                {
                    DataRow dr=ds.Tables[0].Rows[i];
                    if (string.IsNullOrWhiteSpace(dr["新加"].ToString()))//空表示表信息
                    {
                         curTable = new TableInfo();
                        curTable.Name = dr["F2"].ToString().Trim();
                        curTable.Code = dr["p_bs"].ToString().Trim();
    
                        Tables.Add(curTable);
                        continue;
    
                    }
                    var column = new ColumnInfo();
                    column.Code = dr["新加"].ToString().Trim();
                    string tmp = dr["删除"].ToString();
                    if (!string.IsNullOrWhiteSpace(tmp))
                    {
                        column.Name = tmp.Trim().Split(" ".ToArray(), StringSplitOptions.RemoveEmptyEntries)[0];
                        column.Comment = tmp.Trim();
                        if (column.Name.Length >= 10)
                        {
                            column.Name = column.Name.Substring(0, 10);
                        }
                        column.NeedSync = true;
                    }
                    curTable.Columns.Add(column);
                }
    
            }
            private DataSet LoadExcelData()
            {
                DataSet dsExcelSheet = new DataSet();
    
                //打开并读取Excel表信息
                OleDbConnection connExecel = new OleDbConnection(ExcelConnectString);
                OleDbDataAdapter dpQualityLevel = new OleDbDataAdapter("SELECT * FROM [" + Sheet + "]", connExecel);
         
                connExecel.Open();
    
                dpQualityLevel.Fill(dsExcelSheet);
                connExecel.Close();
    
                return dsExcelSheet;
            }
    
        }
    
        #region Class
        public class TableInfo
        {
            public TableInfo()
            {
                Columns = new List<ColumnInfo>();
            }
            public string Name { get; set; }
            public string Code { get; set; }
            public List<ColumnInfo> Columns { get; set; }
    
        }
        public class ColumnInfo
        {
            public string Name { get; set; }
            public string Code { get; set; }
            public string Comment { get; set; }
            /// <summary>
            /// 是否需要同步
            /// </summary>
            public bool NeedSync { get; set; }
        }
        #endregion
    
    }
    
  • 相关阅读:
    【BZOJ 1455】罗马游戏
    【UR #2】树上GCD
    1067: [SCOI2007]降雨量
    1068: [SCOI2007]压缩
    1066: [SCOI2007]蜥蜴
    1065: [NOI2008]奥运物流
    1064: [Noi2008]假面舞会
    1063: [Noi2008]道路设计
    2329: [HNOI2011]括号修复
    2734: [HNOI2012]集合选数
  • 原文地址:https://www.cnblogs.com/wdfrog/p/2224258.html
Copyright © 2020-2023  润新知