Ⅰ 怎样用C#读取Excel文件
命名空间:using System.Data.OleDb;
另注:
参数:HDR=NO/YES
OleDb读入一个Excel工作表(Sheet)的数据后,工作表的第一行会变成标题,第二行起,逐行变为DataTable的一个数据行(Row)
以下是代码:
网友有个说法:stringsqlExcel=("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#DataTable去掉空白行.C#导入excel总是有几行空白的,如何去除
第一种方法:空白行的来源是excel文件中存在空白行
将excel中的空白行直接删除即可
第二中方法:在导入完成后再删除
判断Datatable中行是否为空
如果为空,则调用Rows.Remove(datarow)即可删除该行
Ⅲ C# Winform DataTable 怎么过滤两列不重复
楼上的复杂了 你这个问题非常简单,建议使用分组,这样速度效率都很快
select
列1,列2,MIN(列3)as得到的列3
from列
groupby
列1,列2
Ⅳ 如何对DataTable中的数据进行筛选
对DataTable数据各种筛选
筛选一个DataTable的数据,赋值给另外一个DataTable
假设:
有2个DataTable:DataTable A、DataTable B。
要求:
筛选DataTable A中itemType字段值为book的数据,然后把筛选出来的数据,赋给DataTable B
实现:
(1)方法一:通过 RowFilter 筛选实现
DataView view = new DataView();
view.Table = A;
view.RowFilter = "itemType = 'book'";//itemType是A中的一个字段
B= view.ToTable();
(2)方法二:通过 Select()筛选
DataRow[] rows = A.Select("itemType = 'book'");
B= A.Clone(); //克隆A的结构
foreach (DataRow row in rows)
{
B.ImportRow(row);//复制行数据
}
注:如果有多个筛选条件的话,可以加 and 或 or。例如: A.Select("itemType = 'book' and a='b' or a='c'");
Ⅳ 如何过滤掉DataTable中的指定列/字段
C# code
dt.Columns.Remove( "列名称 ");
dt.Columns.RemoveAt(列索引);
Ⅵ c#,datatable中对时间的过滤过滤
比较时间可以在数据库比较或者取回数据后在程序比较,在数据库比较会更理想。
用between是可以的,不过between前后的数据类型必须和数据本身都是date类型,串是没法between的,数字当日起比对也不会正确。
你说你用>可以,<是空,那> and <肯定是空,我想问题还是出在你的数据类型上,检查是不是都是date
Ⅶ VB.NET 怎么对DataTable的某列数据进行条件筛选,筛选出来的结果该如何计算
可以用DataTable的相关操作方法来实现,在使用上类似sql语句。
Ⅷ jquery datatable 后台获取到的数据 会被过滤掉空格,比如字符串三个空格 显示时只会显示一个空格。
核查一下,前台传的时候的参数值(firebug--网络 就能跟踪到传到后台的参数,参数值,看看发送的时候有没有空格),后台断点跟踪,取到的参数值,再看看空格有没有。看看整个过程,那个环节出问题了
Ⅸ datatable compute sum 怎么排掉为空的数值
在个人版机房重构的过程中,大家最发愁的一件事无非就是上下机,结账和报表。那么在结账的过程中,最发愁的是否就数计算日结账单的数据和周结账的数据。还记得在第一遍机房收费系统的过程中用的是for 循环,但是现在考虑多了为了节省时间能不能不用那么长的循环直接用某个函数求和?所以带着这个问题,就进入了查找资料的过程。得知在Datatable中可以直接求出某行某列的和,所以这就是Datatable.Compute小技巧的由来。
那么接下来就进入DataTable.Compute的学习吧!
以前你肯定没想到DataTable.Compute具有这么多的功能
1:聚合函数”Sum()”
2:自由计算表达式“20*30+1”
3:bool表达式“1=2”
4:IFF逻辑表达式” IIF(20>1000, 0, 1)” //还支持IsNull,Trim,SubString等
一个小应用:让DataTable模拟Excel的Formula功能。
Excel中的Formula功能强大,如果能让DataTable有类似的功能就好了。大部分事件DataTable只是用作数据载体,其实很少用它做计算。DataTable提供的函数Compute就提供了功能强大的计算功能。
Compute函数的参数就两个:Expression,和Filter。
Expresstion是计算表达式,
而Filter则是条件过滤器,类似sql的Where条件。
Ⅹ C在一个DataTable中,Select方法如何写筛选条件达到过滤出数值型空的值
你的002 StuAge是 NULL 的话
select * from DataTable where StuAge is null