C# Excel导入数据

时间:2022-08-31 21:56:16

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的格式

C# Excel导入数据

导入后的样子

C# Excel导入数据

数据库的样子:

C# Excel导入数据

导入需求:

  节点从左到右,依次导入,树的层级递增。

  不导入为空的单元格。

  导入的列 从第一列 到 构件名称(包含构件名称)那列,其它列,不作为节点导入到数据库。

  构件编码 作为 节点的属性导入。构件编码 做为 构件名称那个节点(或者是构件编码左边的节点,有可能构件名称为空) 的属性 导入。

   每个节点 都有一个属性,属性存Excel的列名

  砼等级这列(包含砼等级这列),及右边的所有列,不在导入数据的范围内,跟导入数据没有关系。

  Excel的列名有时候会不对,或者很乱,但是构件编码这列有,构件名称可能会没有,分部工程可能没有,或者多了几个分部工程(Excel列名肯定不会重复)

Excel需要做一些校验,避免数据源错误

  01、隐藏行、隐藏列、
  02、行高不足(可配置)
  03、列名强制校验(必须包含指定列)
  04、单元格为公式(配置项为不支持公式的情况)
  05、构件编码为空
  06、构件编码包含中文
  07、构件编码重复
  08、构件编码过少(可配置)
  09、同行构件名称重复
  10、构件名称重复

导入思路:

  把Excel转换为文本,

  导入数据的时候,使用格式1的文本,

  导入属性 列名的时候,使用格式2的文本。

格式1

C# Excel导入数据

格式2

C# Excel导入数据

程序的配置参数截图:

C# Excel导入数据

C# Excel导入数据

C# Excel导入数据

项目的结构:

C# Excel导入数据

导入时有一些算法的判断,加快了导入的速度,也做了一些该有的缓存。

对性能影响比较大的一个算法:

  比如,导入‘右幅A0-1#桩基砼浇筑’节点的时候,不需要再对‘任河特大桥 右幅 下部结构 A0#桥台’ 这几个节点进行判断了,直接记录与上一行不同的地方,用共用的parentId。

优化思路:

  一开始是没有注意性能的,数据一多,那个导入速度慢死,但是数据的正确性确实也是保证了的,后来就监控各个方法的执行效率,看哪些方法执行的次数多,占用的时间多,相应的优化该方法。

  现在导入的数据可能有个10万+吧

导入测试1:

C# Excel导入数据

导入的Excel:

C# Excel导入数据

C# Excel导入数据的更多相关文章

  1. Excel导入数据到Sql server 中出错:“文本被截断,或者一个或多个字符在目标代码页中没有匹配项”

    从Excel导入数据到Sql server 时,由于表中的数据有的很长,导入时出现如下错误(如果数据不是很长,255内以内,则不会出现错误): 出错原因: SQL Server的导入导出为了确定数据表 ...

  2. C#实现Excel模板导出和从Excel导入数据

    午休时间写了一个Demo关于Excel导入导出的简单练习 1.窗体 2.引用office命名空间 添加引用-程序集-扩展-Microsoft.Office.Interop.Excel 3.封装的Exc ...

  3. 项目经验之:再来一章:excel导入数据 封装成最棒的不容易!!!

    我见过很的系统,包括OA,ERP,CRM等,在常用的功能当中,从外部导入数据是最常用到的.因为很多客户需要以excel的形式提供数据,,这样的方式我们又如何做呢, 大家最常见的做法可能是这样的,在需要 ...

  4. Dynamics CRM EXCEL导入数据字段类型为选项集时的注意事项

    在开始先展示下CRM的导入数据涉及选项集字段时的一个问题 下图是选项集字段的属性 下图是我要导入的excel中的列值,可以看出列明和字段名是一致的,而列值却不是选项集中已有的选项 在导入校验时,只要字 ...

  5. Open XML操作Excel导入数据

    项目中发现使用OleDb(using System.Data.OleDb)相关对象处理Excel导入功能,不是很稳定经常出问题,需要把这个问题解决掉.项目组提出使用OpenXML来处理Excel的导入 ...

  6. 实现excel导入导出功能,excel导入数据到页面中,页面数据导出生成excel文件

    今天接到项目中的一个功能,要实现excel的导入,导出功能.这个看起来思路比较清楚,但是做起了就遇到了不少问题. 不过核心的问题,大家也不会遇到了.每个项目前台页面,以及数据填充方式都不一样,不过大多 ...

  7. PHP Excel导入数据到MySQL数据库

    数据导出已经有了,怎么能没有数据导入呢,同样使用TP5框架,首先需要下载phpexcel.zip,放到第三方类库目录vendor目录下,然后有一个页面可以让你选择要导入的Excel文件,然后点击导入按 ...

  8. 【Kettle】Java借助Kettle将Excel导入数据

    示例功能(仅供测试): 在JAVA项目中,将数据从Excel文件导入数据库中.实现该能有多种方法,而本例则是“不走寻常路”,尝试借助Kettle实现数据导入. 原理: Java中调用存储在Kettle ...

  9. 利用Excel导入数据到SAP C4C

    假设要导入一个Account数据到C4C系统. 工作中心Data Workbench,工作中心视图Import,点download metadata: 会下载一个压缩包到本地. 进入文件夹Templa ...

随机推荐

  1. <?xml version="1.0" encoding="UTF-8"?> 的作用?

    version="1.0" 声明用的xml版本是1.0 encoding="UTF-8" 声明用xml传输数据的时候的字符编码,假如文档里面有中文,编码方式不是 ...

  2. java开发命名规范总结

    一 包名的书写规范 (Package)推荐使用公司或机构的*域名为包名的前缀,目的是保证各公司/机构内所使用的包名的唯一性.包名全部为小写字母,且具有实际的区分意义. 1.1 一般要求1.选择有意义 ...

  3. 两种JSON数据类型的解析

    son数据格式解析我自己分为两种: 一种是普通的,一种是带有数组形式的: 普通形式的:服务器端返回的json数据格式如下: {"userbean":{"Uid" ...

  4. C/S架构自动化测试入门

    所谓C/S架构即Client/Server(客户端/服务器架构).虽然近年来C/S架构产品越来越少,大有被B/S(Browser/Server 浏览器/服务器)架构超越的趋势,但C/S还是有B/S不可 ...

  5. SSI学习(二)

    1.SSI指令 #config:指定返回到client浏览器的错误消息.日期和文件大小所使用的格式. #echo:在 HTML 页中插入环境变量的值. #exec:执行一个应用程序或一条 shell ...

  6. IDEA一定要改的八条配置

    引言 坦白说,我很少写这种操作类型的文章.因为这种文章没啥新意,大家操作步骤肯定是一样的.然而,我答应了我的同事小阳,给她出一篇!毕竟人家打算从Eclipse转IDEA了,于是以示鼓励,写一篇给她! ...

  7. 使用C# 链接 Mysql 显示??? 乱码 的解决方案

    下载以下文件 mysql-connector-odbc-5.3.6-win32.msi 下载并打开以下文件: mysql-installer-community-5.6.28.0.msi 安装mysq ...

  8. 让网页的title动起来

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  9. linux 关闭电子邮件传输服务

    1.检查sendmail的哪些runlevel开启: chkconfig --list sendmail

  10. MVC4中视图获取控制器中返回的json格式数据

    再开发MVC项目时,有时只需要从控制器中返回一个处理的结果,这时返回Json格式的数据非常的方便,在Controller中,提供了几种返回类型和方法,如: Content() 返回文本类型的Conte ...