使用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类下,没看到类似的函数。
你把EXCEL中的数据格式设置为文本吧。这样就不需要再去写函数转换了。
我看了下里面的值,就是以文本的方式来设置的。
@king2003: 如果设置的是文本格式,那取出来的就跟你在EXCEL里看到的是一样的才对。
先取出来,再处理吧。
取出来过后,对应的数据在Datable是可以直接转换为Datetime对象的,然后直接再转换为String呀。取数据应该保持数据的原样,其余的后续输出处理应该在分析的时候处理的。
有可能是你excel中数据格式的问题。
你可以根据楼上两位说的,先把数据取出来,再转换。
可以尝试下NPOI
还是自己解决问题了