使用OLEDB可以对excel文件进行读取1

使用OLEDB可以对excel文件进行读取,我们只要把该excel文件作为数据源即可。

一 在D盘创建excel文件test.xls:

二 将工作表Sheet1的内容读取到DataSet

<span style="color:#0000ff;">string</span> strConn = "<span style="color:#8b0000;">Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/test.xls;</span>"+
    "<span style="color:#8b0000;">Extended Properties='Excel 8.0'</span>";
DataSet ds = <span style="color:#0000ff;">new</span> DataSet();
OleDbDataAdapter oada = <span style="color:#0000ff;">new</span> OleDbDataAdapter("<span style="color:#8b0000;">select * from [Sheet1$]</span>", strConn);
oada.Fill(ds);

读取的DataSet为:

从图中可以看出excel文件中的第一行变成了DataSet中的列名,这正是系统的默认设置。

三 如果想把第一行也作为数据行,那我们可以给连接字符串添加一个HDR=No属性

如:

<span style="color:#0000ff;">string</span> strConn = "<span style="color:#8b0000;">Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/test.xls;</span>"+
    "<span style="color:#8b0000;">Extended Properties='Excel 8.0;HDR=No'</span>";
DataSet ds = <span style="color:#0000ff;">new</span> DataSet();
OleDbDataAdapter oada = <span style="color:#0000ff;">new</span> OleDbDataAdapter("<span style="color:#8b0000;">select * from [Sheet1$]</span>", strConn);
oada.Fill(ds);

结果也许会让你有点想不到:

第一行的第一列和第三列都变成空的了,这是因为系统把第一列识别成了数字,把第三列识别成了日期,而第一行的数据不符合格式的要求,所以就变成空的了。

四 我们还可以把所有列都做为字符串来读取,只要添加属性IMEX=1即可

<span style="color:#0000ff;">string</span> strConn = "<span style="color:#8b0000;">Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/test.xls;</span>"+
    "<span style="color:#8b0000;">Extended Properties='Excel 8.0;HDR=No;IMEX=1'</span>";
DataSet ds = <span style="color:#0000ff;">new</span> DataSet();
OleDbDataAdapter oada = <span style="color:#0000ff;">new</span> OleDbDataAdapter("<span style="color:#8b0000;">select * from [Sheet1$]</span>", strConn);
oada.Fill(ds);

结果又会如何呢?

是不是再次出乎你的意料,第三行的日期怎么变成数字了,其实excel在转换格式的时候就自动把日期变成数字了,那这个数字是怎么来的呢 ? 如果你把日期改成1900年1月1日,那么你可以看到他的转换结果是1,以此类推,39902是哪一天就明白了吧。

五 也许你并不想读取整个excel的内容

如果只想读取前两列可以用:select * from [Sheet1$A:B]

如果只想读取A1到B2的内容,就用:select * from [Sheet1$A1:B2]

六 如果不知道工作表的名字或名字被人为修改了该怎么办呢?

我们可以通过索引来获取指定工作表的名字,以下方法可以用来获取工作表名称的数组:

ArrayList al = <span style="color:#0000ff;">new</span> ArrayList();
<span style="color:#0000ff;">string</span> strConn;
strConn = "<span style="color:#8b0000;">Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/test.xls;</span>"+
    "<span style="color:#8b0000;">Extended Properties=Excel 8.0;</span>";
OleDbConnection conn = <span style="color:#0000ff;">new</span> OleDbConnection(strConn);
conn.Open();
DataTable sheetNames = conn.GetOleDbSchemaTable
    (OleDbSchemaGuid.Tables, <span style="color:#0000ff;">new</span> <span style="color:#0000ff;">object</span>[] { <span style="color:#0000ff;">null</span>, <span style="color:#0000ff;">null</span>, <span style="color:#0000ff;">null</span>, "<span style="color:#8b0000;">TABLE</span>" });
conn.Close();
<span style="color:#0000ff;">foreach</span> (DataRow dr <span style="color:#0000ff;">in</span> sheetNames.Rows)
{
    al.Add(dr[2]);
}
<span style="color:#0000ff;">return</span> al;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值