首页 新闻 会员 周边

c#通过Oledb读取Excel

0
悬赏园豆:20 [已关闭问题] 关闭于 2014-10-22 15:51

使用System.Data.OleDb命名空间下的类来读取Excel文件,

           string sql="select TEXT(CreateTime,'yyyy-m-d h:mm:ss.000') from [sheet1$]";

           DataSet dataSet = new DataSet();
            OleDbConnection connection = new OleDbConnection(providerInfo);
            connection.Open();

            OleDbDataAdapter dataAdapter = new OleDbDataAdapter(sql, connection);
            dataAdapter.Fill(dataSet, "sheet1");
            connection.Close();

提示出错:表达式中 'TEXT' 函数未定义

再把sql语句改为如下:

string sql="select Application.WorksheetFunction.TEXT(CreateTime,'yyyy-m-d h:mm:ss.000') from [sheet1$]";

提示出错:表达式中 'Application.WorksheetFunction.TEXT' 函数未定义

这个错误可以理解,Application.WorksheetFunction下确实没有 TEXT函数。

找了一个Trim

string sql="select Trim(CreateTime) from [sheet1$]";

 

查询正确执行。

 

现在的问题是,

select TEXT(CreateTime,'yyyy-m-d h:mm:ss.000') from [sheet1$]

这个函数到底是哪个呢,Application.WorksheetFunction类下,没看到类似的函数。

king2003的主页 king2003 | 初学一级 | 园豆:161
提问于:2014-09-17 17:26
< >
分享
所有回答(6)
0

你把EXCEL中的数据格式设置为文本吧。这样就不需要再去写函数转换了。

Alex_QY1987 | 园豆:1888 (小虾三级) | 2014-09-17 17:46

我看了下里面的值,就是以文本的方式来设置的。

支持(0) 反对(0) king2003 | 园豆:161 (初学一级) | 2014-09-17 17:53

@king2003: 如果设置的是文本格式,那取出来的就跟你在EXCEL里看到的是一样的才对。

支持(0) 反对(0) Alex_QY1987 | 园豆:1888 (小虾三级) | 2014-09-18 17:02
0

先取出来,再处理吧。

幻天芒 | 园豆:37205 (高人七级) | 2014-09-17 20:14
0

取出来过后,对应的数据在Datable是可以直接转换为Datetime对象的,然后直接再转换为String呀。取数据应该保持数据的原样,其余的后续输出处理应该在分析的时候处理的。

FrankZC | 园豆:235 (菜鸟二级) | 2014-09-19 12:34
0

有可能是你excel中数据格式的问题。

你可以根据楼上两位说的,先把数据取出来,再转换。

小也 | 园豆:75 (初学一级) | 2014-09-19 17:07
0

可以尝试下NPOI

xiaocong_soft | 园豆:556 (小虾三级) | 2014-09-27 10:47
0

还是自己解决问题了

king2003 | 园豆:161 (初学一级) | 2014-10-21 12:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册