遗忘海岸

江湖程序员 -Feiph(LM战士)

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

将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
 
}

posted on   遗忘海岸  阅读(1416)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示