今天学习的是从FTP上下载Excel文件,DataTable接收数据之后,在DataTable中通过筛选,删减修改之后把数据插入到DB相应表中。

优点:读取方式简单、读取速度快

缺点:除了读取过程不太灵活之外,这种读取方式还有个弊端就是,当Excel数据量很大时。会非常占用内存,当内存不够时会抛出内存溢出的异常。

命名空间:using System.Data.OleDb;

另注:

参数:HDR=NO/YES

OleDb读入一个Excel工作表(Sheet)的数据后,工作表的第一行会变成标题,第二行起,逐行变为DataTable的一个数据行(Row)

以下是代码:

//根据excle的路径把第一个sheel中的内容放入datatablepublic static DataTable ReadExcelToTable(string path)//excel存放的路径{try{//连接字符串string connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';"; // Office 07及以上版本 不能出现多余的空格 而且分号注意//string connstring = Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';"; //Office 07以下版本 using (OleDbConnection conn = new OleDbConnection(connstring)){conn.Open();DataTable sheetsName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //得到所有sheet的名字string firstSheetName = sheetsName.Rows[0][2].ToString(); //得到第一个sheet的名字string sql = string.Format("SELECT * FROM [{0}]", firstSheetName); //查询字符串//string sql = string.Format("SELECT * FROM [{0}] WHERE [日期] is not null", firstSheetName); //查询字符串OleDbDataAdapter ada = new OleDbDataAdapter(sql, connstring);DataSet set = new DataSet();ada.Fill(set);return set.Tables[0];}}catch (Exception){return null;}}

项目中还可以结合流文件(fileStream)的操作,检查每一行数据,数据类型等,一行一行的插入到DB的表,使用DataTable的目的就是为了检查excel的行列数(主要是列数)是否符合要求,比如今天的测试中,
   

网友有个说法:string sqlExcel = ("select * from [计划上sheet$A3:D8]"); sheet$后面是范围A3到D8的 如果行不确定 要取到后面行  就把D8改成D

后来看到的,所以还没测试,

以上这个问题我也在想,是不是excel里面sheet的活动界面的问题,select * from [sheetName]选取了所有的列数,所以导致可能DaTaTable导致空列,建议在DaTaTable进行删改,或者用datagrid修改,随后保存修改到DATATABLE中。

对于其他的excel读取方式,参见博客地址:http://www.cnblogs.com/icyJ/p/ReadExcel.html

另外对于参数connstring字符串的标准,

1)HDR表示要把第一行作为数据还是作为列名,作为数据用HDR=no,作为列名用HDR=yes;

使用 Excel 工作簿时,默认情况下,区域中的第一行是标题行(或字段名称)。如果第一个区域不包含标题,您可以在连接字符串的扩展属性中指定 HDR=NO。如果您在连接字符串中指定 HDR=NO,Jet OLE DB 提供程序将自动为您命名字段(不管excel中的列叫什么名字,F1 表示第一个字段,F2 表示第二个字段,依此类推,select F1,F2 from [sheet1$]);

2)IMEX=1将所有读入数据看作字符,其他值(0、2)请查阅相关帮助文档;

3)如果出现“找不到可安装的isam”错误,一般是连接字符串错误

string connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';";

HDR表示要把第一行作为数据还是作为列名,作为数据用HDR=no,作为列名用HDR=yes;

string connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1';";

接着继续:

这里出现的问题是:

很容易造成读入很多的空行到datatable中,比如下面的excel,我们基本上看不出到底有多少实际的行数:

string sql = string.Format("SELECT * FROM [{0}]", firstSheetName); //查询字符串

string sql = string.Format("SELECT * FROM [{0}] WHERE [日期] is not null", firstSheetName); //查询字符串,字段名注意一定要和excel中标题名一致,有空格哦~

note:这时HDR参数必须是YES,否则会报异常

参考:http://www.devba.com/index.php/archives/4024.html

 Excel读取存在空白的原因:表格有两个后台属性,分别是已使用的最大行数和已使用的最大列数。这个 adapter可能是按这两个属性来的,没法改。读取代码部分如图所示,图示为主要解析Excel到DataTable.经过仔细监视代码我们会发现在 da.Fill(dt)时,把空白行填充到DataTable了。总体来讲这个是有微软提供的方法和规则,那么是没办法改的。

解决办法有以下几个:

1、在读取的时候SQL语句上进行过滤:Select * From  SheetName where col1 is not null and col2 is not null 在读取的过程时,对空白行进行非空顾虑,建议过滤非空时,根据业务,把不可为空的Excel中的列作为col1和col2;当然可以先删除空白行后再进行 读取;总之先把空白行在读取到Excel前除掉;

2、在读取Excel到DataTable后再过滤掉空白行;DataTable空白行处理空白行方法应该很多的;但是在进行业务校验的时候一定需要先删除空白行!

C# oleDb方法读取Excel文件(我草 牛逼啊兄弟,我服了)select * from [计划上sheet$A3:D8]相关推荐

  1. Python的xlrd的get_sheet方法读取Excel文件报错:XLRDError: Can‘t load sheets after releasing resources.

    版权声明:转载请注明作者(独孤尚良dugushangliang)出处:https://blog.csdn.net/dugushangliang/article/details/109581095 遇到 ...

  2. php循环读取excel每个单元格,php使用PHPexcel类读取excel文件(循环读取每个单元格的数据)...

    error_reporting(E_ALL); date_default_timezone_set('Asia/ShangHai'); include_once('Classes/PHPExcel/I ...

  3. android读取excel文件_python里读写excel等数据文件的几种常用方式

    python处理数据文件第一步是要读取数据,文件类型主要包括文本文件(csv.txt等).excel文件.数据库文件.api等. 下面整理下python有哪些方式可以读取数据文件. 1. python ...

  4. js node.js读取excel文件返回为json文本

    node-xlsx: 基于Node.js解析excel文件数据及生成excel文件:只支持xlsx xlsx: 基于Node.js解析excel文件数据及生成excel文件:只支持xlsx excel ...

  5. C# 读取EXCEL文件的三种经典方法

    1.方法一:采用OleDB读取EXCEL文件:  把EXCEL文件当做一个数据源来进行数据的读取操作,实例如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 public D ...

  6. pythonselenium实战 excel读取和写入_Python3.6+selenium2.53.6自动化测试_读取excel文件的方法...

    环境: 编辑工具: 浏览器: 安装xlrd 安装DDT 一 分析 1 目录结构 2 导入包 二 代码 import xlrd class ExcelUtil(): def __init__(self, ...

  7. python读取excel部分值存入另一个excel-python3读取excel文件只提取某些行某些列的值方法...

    今天有一位同学给了我一个excel文件,要求读取某些行,某些列,然后我试着做了一个demo,这里分享出来,希望能帮到大家: 首先安装xlrd: pip3 install xlrd 然后上代码: imp ...

  8. python怎么读取excel某一行某一列-python3读取excel文件只提取某些行某些列的值方法...

    今天有一位同学给了我一个excel文件,要求读取某些行,某些列,然后我试着做了一个demo,这里分享出来,希望能帮到大家: 首先安装xlrd: pip3 install xlrd 然后上代码: imp ...

  9. python读取excel某一行内容-python3读取excel文件只提取某些行某些列的值方法

    今天有一位同学给了我一个excel文件,要求读取某些行,某些列,然后我试着做了一个demo,这里分享出来,希望能帮到大家: 首先安装xlrd: pip3 install xlrd 然后上代码: imp ...

最新文章

  1. iOS UI基础-7.0 UIScrollView
  2. 艾伟也谈项目管理,一种适用于真实世界BPM的协作方式
  3. Linux之深入理解anaconda使用
  4. linux搭建博客Day1
  5. 软件持续集成(CI)、持续交付(CD)和持续部署(CD)
  6. 用VS2013编译FFMPEG232
  7. mysql视图的语法错误_MySQL视图的优缺点以及如何创建视图
  8. 跨5合并dnf无限连接服务器,不妨一试!跨5等跨区卡登陆卡黑屏解决办法分享
  9. 软件工程导论-软件工程概论(学习笔记)
  10. spark机器学习电影推荐
  11. 【coq】函数语言设计 笔记 11 - rel
  12. 我的NVIDIA开发者之旅——优化显卡性能
  13. K8S 创建 Deployment
  14. K8S 部署电商项目
  15. 运筹帷幄的“懒蚂蚁”
  16. 用Python+ChatGPT
  17. 百岁老人畅谈百年交大桥梁[转]
  18. Windows事件日志监听
  19. 泡泡龙游戏算法实现简介
  20. duilib开发(五):界面布局

热门文章

  1. Java实现五子棋(附详细源码)
  2. 计算机窗口闪屏,热点:电脑显示器闪屏(电脑屏幕闪烁的解决方法)
  3. 第三章:鼓起勇气,大胆尝试
  4. 命令行参数(C语言)
  5. Python编程基础:评定成绩等级**
  6. 五款手机黑科技APP推荐 喜欢的都拿去
  7. Wsl与Windows互相访问
  8. SSM学习——Spring事务(9)
  9. 康希通信发布多款射频前端芯片:性能比肩美商
  10. 如何PHP给人生日祝福,给自己的生日祝福说说 幽默的祝别人生日快乐