博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# Excel导入数据
阅读量:6935 次
发布时间:2019-06-27

本文共 1873 字,大约阅读时间需要 6 分钟。

 

 

表的创建脚本

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:

 

转载于:https://www.cnblogs.com/guxingy/p/10736850.html

你可能感兴趣的文章
如何做到早起一小时?(转)
查看>>
[ACM_水题] ZOJ 3712 [Hard to Play 300 100 50 最大最小]
查看>>
OGG_GoldenGate数据表定义方式DEFGEN(案例)
查看>>
使用jQuery获取radio/checkbox组的值的代码收集
查看>>
计算机:2014考研大纲全面解析
查看>>
linux下系统启动时,几个配置文件 /etc/profile、~/.bash_profile 等几个文件的执行过程,先后顺序...
查看>>
[Android]对BaseAdapter中ViewHolder编写简化
查看>>
php 5.3新特性
查看>>
微信公共服务平台开发(.Net 的实现)3-------发送文本消息
查看>>
Android Http请求方法汇总
查看>>
[物理学与PDEs]第3章第3节 电导率 $\sigma$ 为无穷时的磁流体力学方程组 3.2 向量场过任一随流体运动的曲面的通量对时间的微式及其应用...
查看>>
C#中MessageBox.Show()方法详解
查看>>
Oracle中 HWM与数据库性能的探讨
查看>>
NGUI图集切割代码
查看>>
Bootstrap模态框(modal)垂直居中
查看>>
iOS中NSBundle的使用
查看>>
jquery图片滚动仿QQ商城带左右按钮控制焦点图片切换滚动
查看>>
CSS3+HTML5特效9 - 简单的时钟
查看>>
webservice调用的四种方式
查看>>
警报级别
查看>>