C# Excel导入数据
表
表的创建脚本
CREATE TABLE [dbo].[TB_PROJECTS_New1]( [PROID] [decimal](10, 0) NOT NULL, [PROJECTNAME] [nvarchar](500) NULL, [PROJECTCODE] [nvarchar](100) NULL, [PARENTID] [decimal](10, 0) NULL, [NEXTID] [decimal](10, 0) NULL, [PROJECTORDER] [decimal](10, 0) NULL, [ISENABLED] [decimal](10, 0) NULL, [OWNERID] [decimal](10, 0) NULL, [CONSTRUCTIONID] [decimal](10, 0) NULL, [SUPERVISIONID] [decimal](10, 0) NULL, [CONTRACTID] [decimal](10, 0) NULL, [LEVEL] [decimal](10, 0) NULL, [QUANTITY] [decimal](10, 0) NULL, [VERSIONING] [nvarchar](max) NULL, [MILEAGENO] [nvarchar](100) NULL, [COMPONENTCODE] [varchar](255) NULL, [NCOMPONENTCODE] [varchar](255) NULL, [TASKSTATUS] [decimal](10, 0) NULL, [FBXID] [nvarchar](50) NULL, [ISSUBUNIT] [decimal](10, 0) NULL, [BIDSION] [varchar](10) NULL, [ProjectType] [nvarchar](max) NULL, [EquCode] [nvarchar](max) NULL ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
Excel的格式
导入后的样子
数据库的样子:
导入需求:
节点从左到右,依次导入,树的层级递增。
不导入为空的单元格。
导入的列 从第一列 到 构件名称(包含构件名称)那列,其它列,不作为节点导入到数据库。
构件编码 作为 节点的属性导入。构件编码 做为 构件名称那个节点(或者是构件编码左边的节点,有可能构件名称为空) 的属性 导入。
每个节点 都有一个属性,属性存Excel的列名
砼等级这列(包含砼等级这列),及右边的所有列,不在导入数据的范围内,跟导入数据没有关系。
Excel的列名有时候会不对,或者很乱,但是构件编码这列有,构件名称可能会没有,分部工程可能没有,或者多了几个分部工程(Excel列名肯定不会重复)
Excel需要做一些校验,避免数据源错误
01、隐藏行、隐藏列、
02、行高不足(可配置)
03、列名强制校验(必须包含指定列)
04、单元格为公式(配置项为不支持公式的情况)
05、构件编码为空
06、构件编码包含中文
07、构件编码重复
08、构件编码过少(可配置)
09、同行构件名称重复
10、构件名称重复
导入思路:
把Excel转换为文本,
导入数据的时候,使用格式1的文本,
导入属性 列名的时候,使用格式2的文本。
格式1
格式2
程序的配置参数截图:
项目的结构:
导入时有一些算法的判断,加快了导入的速度,也做了一些该有的缓存。
对性能影响比较大的一个算法:
比如,导入‘右幅A0-1#桩基砼浇筑’节点的时候,不需要再对‘任河特大桥 右幅 下部结构 A0#桥台’ 这几个节点进行判断了,直接记录与上一行不同的地方,用共用的parentId。
优化思路:
一开始是没有注意性能的,数据一多,那个导入速度慢死,但是数据的正确性确实也是保证了的,后来就监控各个方法的执行效率,看哪些方法执行的次数多,占用的时间多,相应的优化该方法。
现在导入的数据可能有个10万+吧
导入测试1:
导入的Excel:
相关文章
- sql server与C#中的字符串相等等效写法
- c#封装DBHelper类 c# 图片加水印 (摘)C#生成随机数的三种方法 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象 c# 制作正方形图片 JavaScript 事件循环及异步原理(完全指北)
- 请求大神,C#如何截取字符串中指定字符之间的部分 按指定字符串分割 一分为二 c# 去除字符串中的某个已知字符
- 一个由正则表达式引发的血案 vs2017使用rdlc实现批量打印 vs2017使用rdlc [asp.net core 源码分析] 01 - Session SignalR sql for xml path用法 MemCahe C# 操作Excel图形——绘制、读取、隐藏、删除图形 IOC,DIP,DI,IoC容器
- C# OO(初级思想)
- Word控件Spire.Doc 【Table】教程(10): 如何在 C#、VB.NET 中将嵌入式 Excel 工作表转换为 Word 表格
- Word控件Spire.Doc 【段落处理】教程(三):在 C#、VB.NET 中管理词标题以形成目录
- C#【文件操作篇】按行读取txt文本
- C#类的属性遍历及属性值获取
- C#程序集系列06,程序集清单,EXE和DLL的区别
- C#位运算符的基本用法
- Excel 函数教程之VLOOKUP实用教程与10个适用于初学者和高级用户的VLOOKUP案例(教程含数据excel)
- Excel VLOOKUP实用教程之 09 VLOOKUP 与多个条件一起使用?(教程含数据excel)
- Excel VLOOKUP实用教程之 10 在使用 VLOOKUP 函数时处理错误?(教程含数据excel)
- C# 将一个string数组转换为int数组
- C# const VS readonly
- 关于Unity的C#基础学习(四)
- C#-IO-Path类-path.GetFullPath 获取上级目录实现方法
- C# params关键字
- CAD表格怎么转换成Excel表格?CAD表格转EXCEL步骤
- 【C#】读取Excel中嵌套的Json对象,Json带斜杠的问题(其二)
- 【C#】读取Excel中嵌套的Json对象,Json带斜杠的问题(其一)
- C# 字典转换成list 排序后 修改其数据 效率对比