我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C#实现表格数据转实体的示例代码

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C#实现表格数据转实体的示例代码

场景

在实际开发过程中,特别是接口对接之类的,对于这种需求是屡见不鲜,现在很多在线平台也都提供了像json转实体、sql转实体等。但是很多情况下,我们接收到的其实都是一份接口文档,在文档中利用表格标明了字段的名称、备注、类型等,而关于json什么的都是后来才有的,或者说,传输根本不用json。因此,表格数据能够转成实体类的需求就比较明显了。

需求

所以,综上场景所述,我们需要一个小工具,可以将表格数据直接转换为c#代码,当然,本着通用化的思想,小工具当然不会单纯的做一个读取excel文件的功能,这样一点也不好用,因为由其他地方提供的文档有的是excel,有的是word,所以,我们利用剪切板来做,只要解析剪切板的数据就可以了。

开发环境

.NET Framework版本:4.5

开发工具

 Visual Studio 2013

实现代码

 public class GeneratorFieldModel
    {
        public string FieldDesc { get; set; }
        public string Modifier { get { return "public"; } }
        public string Type { get; set; }
        public string FieldName { get; set; }
        public string Property { get { return "{ get; set; }"; } }
        public bool IsNull { get; set; }
        public bool IsKey { get; set; }
        public string DefaultText { get; set; }

        readonly string startDesc = "\t\t/// <summary>";
        readonly string endDesc = "\t\t/// </summary>";


        public string FieldDescText
        {
            get
            {
                List<string> list = new List<string>();
                list.Add(startDesc);
                list.Add("\t\t///" + FieldDesc + "");
                list.Add(endDesc);
                return "\r\n" + string.Join("\r\n", list);
            }
        }

        public string PropertyText
        {
            get { return "\t\t" + string.Join(" ", Modifier, Type + (IsNull ? "?" : ""), FieldName, Property); }
        }
    }
public partial class Form_ToEntity : Form
    {
        BindingList<Entity> bindData = new BindingList<Entity>();
        public Form_ToEntity()
        {
            InitializeComponent();
        }
        private void Form_ToEntity_Load(object sender, EventArgs e)
        {
            string[] types = new string[]{
            "string",
            "decimal",
            "double",
            "int",
            "bool", 
            "long"
            };
            DataGridViewComboBoxColumn dgvComboBox = Column2 as DataGridViewComboBoxColumn;
            dgvComboBox.Items.AddRange(types);
            dataGridView1.DataSource = bindData;
        }

        #region 处理点击选中着色
        private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            DataGridViewColumn selectColumn = dataGridView1.Columns[e.ColumnIndex];

            Color color = selectColumn.DefaultCellStyle.BackColor == Color.LightGray ? Color.White : Color.LightGray;
            selectColumn.DefaultCellStyle.BackColor = color;
            selectColumn.HeaderCell.Style.BackColor = color;
            selectColumn.Tag = color;
        }

        private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
        {
            if (e.RowIndex == -1 && e.ColumnIndex > -1)
            {
                DataGridViewColumn selectColumn = dataGridView1.Columns[e.ColumnIndex];
                Color color = selectColumn.Tag == null ? Color.White : (Color)selectColumn.Tag;
                e.CellStyle.BackColor = color;
            }
        }

        #endregion

        /// <summary>
        /// 获取剪切板数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Control && e.KeyCode == Keys.V)
            {
                try
                {
                    string text = Clipboard.GetText();
                    if (string.IsNullOrWhiteSpace(text))
                    {
                        return;
                    }

                    string[] clipData = text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);

                    bindData = Clip2Entity(clipData);
                    dataGridView1.DataSource = new BindingList<Entity>(bindData);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }

        /// <summary>
        /// 将剪切板数据转换为表格数据
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        private BindingList<Entity> Clip2Entity(string[] data)
        {
            BindingList<Entity> list = new BindingList<Entity>();

            foreach (string s in data)
            {
                Entity entity = new Entity();
                string[] arr = s.Split('\t');
                if (arr.Length == 2)
                {
                    //选中名称和类型
                    if (isCheck(dataGridView1.Columns[0]) && isCheck(dataGridView1.Columns[1]))
                    {
                        entity.name = arr[0];
                        entity.type = arr[1].ToLower();
                        entity.remark = "";
                    }
                    //选中名称和备注
                    if (isCheck(dataGridView1.Columns[0]) && isCheck(dataGridView1.Columns[2]))
                    {
                        entity.name = arr[0];
                        entity.type = "string";
                        entity.remark = arr[1];
                    }
                    //选中类型和备注
                    if (isCheck(dataGridView1.Columns[1]) && isCheck(dataGridView1.Columns[2]))
                    {
                        entity.name = "";
                        entity.type = arr[0].ToLower();
                        entity.remark = arr[1];
                    }
                }
                else if (arr.Length == 3)
                {
                    entity.name = arr[0];
                    entity.type = arr[1].ToLower();
                    entity.remark = arr[2];
                }
                else
                {
                    if (isCheck(dataGridView1.Columns[0]))
                    {
                        entity.name = s;
                        entity.type = "string";
                        entity.remark = "";
                    }
                    else if (isCheck(dataGridView1.Columns[1]))
                    {
                        entity.name = "";
                        entity.type = s.ToLower();
                        entity.remark = "";
                    }
                    else if (isCheck(dataGridView1.Columns[2]))
                    {
                        entity.name = "";
                        entity.type = "string";
                        entity.remark = s;
                    }
                }
                list.Add(entity);
            }
            return list;
        }
        /// <summary>
        /// 判断列是否被选中
        /// </summary>
        /// <param name="column"></param>
        /// <returns></returns>
        private bool isCheck(DataGridViewColumn column)
        {
            if (column.DefaultCellStyle.BackColor == Color.LightGray)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        private class Entity
        {
            public string name { get; set; }
            public string type { get; set; }
            public string remark { get; set; }
        }

        private void btn_add_Click(object sender, EventArgs e)
        {
            bindData.Add(new Entity
            {
                type = "string"
            });
        }

        private void btn_delete_Click(object sender, EventArgs e)
        {
            foreach (DataGridViewRow row in dataGridView1.SelectedRows)
            {
                dataGridView1.Rows.Remove(row);
            }

        }

        private void btn_generate_Click(object sender, EventArgs e)
        {
            StringBuilder stringBuilder = new StringBuilder();
            foreach (Entity entity in bindData)
            {
                GeneratorFieldModel field = new GeneratorFieldModel
                {
                    FieldName = entity.name,
                    FieldDesc = entity.remark,
                    Type = entity.type
                };
                stringBuilder.AppendLine(field.FieldDescText);
                stringBuilder.AppendLine(field.PropertyText);
            }
            string path = Application.StartupPath + "\\entity.txt";
            File.WriteAllText(path, stringBuilder.ToString());
            Process.Start(path);
        }

    }

实现效果

代码解析:首先我们定义了一个GeneratorFieldModel类,在这个类中根据不同的字段属性进行了代码的拼接,这样就可以很方便的调用,直接把值传进去即可得到要生成的实体代码,然后在Ui中,首先处理了一下选中变色(标识我们要处理哪些数据列),然后就是分析剪切板数据,转化成需要的结构化数据(表格复制到剪切板的数据,其实就是以"\r\n"来分割的),显示到dataGridView中。

到此这篇关于C#实现表格数据转实体的示例代码的文章就介绍到这了,更多相关C#表格数据转实体内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C#实现表格数据转实体的示例代码

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C#实现Word转换RTF的示例代码

这篇文章主要为大家详细介绍了如何利用C#实现Word转换RTF,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以跟随小编一起了解一下
2022-12-21

C++实现将数据写入Excel工作表的示例代码

直观的界面、出色的计算功能和图表工具,使Excel成为最流行的个人计算机数据处理软件。在本文中,您将学习如何使用 Spire.XLS for C++ 创建 Excel 文档,以及如何将数据写入 Excel 工作表
2023-03-11

Python实现自动整理表格的示例代码

这篇文章主要为大家详细介绍了如何利用Python实现自动整理表格的功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下
2023-03-02

C#实现批量Word转换Html的示例代码

这篇文章主要为大家详细介绍了如何利用C#批量Word转换Html的功能,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以跟随小编一起了解一下
2022-12-22

NodeJS实现视频转码的示例代码

视频转码就是一个先解码,再编码的过程,从而将原来的视频转换成我们需要的视频。这种转换可能包括各式(mp4/avi/flv等)、分辨率、码率、帧率等。传统的视频转码中,很常用的工具是FFmpeg。FFmpeg是一套可以用来记录、转换数字音频、
2022-06-04

MySQL/MariaDB 如何实现数据透视表的示例代码

前文介绍了Oracle 中实现数据透视表的几种方法,今天我们来看看在 MySQL/MariaDB 中如何实现相同的功能。 本文使用的示例数据可以点此下载。 使用 CASE 表达式和分组聚合数据透视表的本质就是按照行和列的不同组合进行数据分组
2022-05-14

C++实现Matlab的zp2tf函数的示例代码

matlab 的 zp2tf 函数的作用是将极点形式的 H(s) 函数的分母展开,本文主要为大家介绍了C++实现Matlab的zp2tf函数示例代码,需要的可以参考一下
2023-05-16

Python数据结构之顺序表的实现代码示例

顺序表即线性表的顺序存储结构。它是通过一组地址连续的存储单元对线性表中的数据进行存储的,相邻的两个元素在物理位置上也是相邻的。比如,第1个元素是存储在线性表的起始位置LOC(1),那么第i个元素即是存储在LOC(1)+(i-1)*sizeo
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录