DateTime格式从Excel工作表导入时不匹配我正在使用以下代码将Excel工作表中的数据导入DataTable:OleDbConnectioncon=newOleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;DataSource="+fileName+";ExtendedProperties=Excel8.0");con.Open();_myDataSet=新数据集();OleDbDataAdaptermyCommand=newOleDbDataAdapter("SELECT*FROM["+"Sheet1"+"$]",con);myCommand.Fill(_myDataSet);con.Close();我在Excel工作表中有一个日期列,格式为dd/MM/yyyy。当日期为dd/MM/yyyy(例如27/12/2009dd/MM/yyyy27/12/2009)时,上述代码将失败。如何指定日期格式?编辑(添加更多细节):它不会抛出任何异常。将数据导入数据集,直到遇到日期格式无效的行。我在Excel工作表中的日期为dd/MM/yyyy。当我使用OleDbDataAdapter导入时,Excel工作表中的日期应为MM/dd/yyyy。当它遇到诸如27/2/2009之类的日期时,它会自然地停止导入过程,但不会抛出任何错误/异常。所以我在DataTable中只有部分结果。请帮忙。拉入日期或其他混合数据列项目用于让我使用Excel。似乎他们的提供者“查看”XX行(取决于提供者版本)以确定运行时的列类型。以前关于将属性应用于联接的答案在过去对我有帮助,但是当列中有空白日期和/或不同值时它们没有帮助-它混淆了Excel驱动程序。我建议您使用FileHelpers或其他第3方库。InfragisticsExcel组件对我来说工作正常,FileHelpers是开源的。在MSAccess中链接Excel电子表格时,如果列具有混合数据类型,则会出现问题。例如,如果一列中的第一行是“Text”,其余都是Numeric,则Numeric字段将被格式化为Text并#Error输出。此外,日期和非日期混合在同一列中。有一些很好的答案可供尝试,但这里有一个简单的解决方案来读取这些混合数据类型而不会出现数据类型不匹配错误:尝试将“IMEX=1”添加到MSAccessSQL,例如:SELECTTYPE、Width、weightfrom[Excel8.0;国际贸易指数=1;DATABASE=C:TEMPMySpreadsheet.xls].MyExcelTable谢谢,BrianJasmer您可以使用英国文化信息CultureInfoculture=newCultureInfo("en-GB");解析英国格式dd/MM/YYYY的日期DateTimedate=DateTime.Parse("27/12/2009",culture);其中“27/12/2009”是您的日期字段,您有多少行,日期列是所有单元格的生效日期吗?有时,如果前8行的单元格中存在一些不一致,OleDB例程会将列错误地识别为文本。(8是确定数据类型的默认读取行数)也许尝试在excel中格式化日期列然后导入?您可能需要检查您所处的文化是否支持英国风格的日期。以下是如何在线程级别检查和更改它的链接http://support.microsoft.com/kb/306162OleDb连接字符串似乎支持“;LocaleIdentifier=”。我认为eb-GB标识符是2057(不要引用我的话;)),您也可以试试。至于没有被抛出的异常,我认为在填充期间你可能想根据这个链接查看RowUpdated事件http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbdataadapter.rowupdated(VS.80).aspx。这就是DataSet的Fill方法的工作方式,它将在有问题的行上退出,使用上面的事件您可能有一些选项来忽略该行或重新格式化它。您应该始终在连接字符串中指定的一件事是IMEX=1:Provider=Microsoft.Jet.OLEDB.4.0;DataSource="+fileName+";ExtendedProperties="Excel8.0;IMEX=1"它有助于解析列包含数字和字符串。也可能有助于日期解析,但您必须手动转换所有日期:System.IFormatProviderformat=newSystem.Globalization.CultureInfo("en-US",true);DateTimed=DateTime.Parse(dataSet.Tables[0].Rows[i]["MyDate"]asstring,format);如何以编程方式而不是通过数据适配器填充数据集?OleDbConnectioncon=newOleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;DataSource="+fileName+";ExtendedProperties=Excel8.0");Dim_myDataSet作为新数据集Dimcon作为新OleDb.OleDbConnectioncon.Open()Dimcmd作为新OleDb.OleDbCommand("SELECT*FROM["+"Sheet1"+"$]",con)使用dr=cmd.ExecuteReader()而dr.ReadDimrow=_myDataSet.Tables(0).NewRow()Withdr.Item("exceldatecolumn").ToStringDimdtAsNewDate(CInt(.Substring(6)),CInt(.Substring(3,2)),CInt(.Substring(0,2)))row.Item("datasetdatecolumn")=dtEndWith*'在这里填充其他列'*_myDataSet.Tables(0).Rows.Add(row)EndWhileEndUsing您可以使用此函数将格式化的任何日期转换为您需要的格式。代码如下:PublicSharedFunctionConvertToDate(ByValdateStringAsString,ByRefresultAsDateTime)AsBooleanTry'这是您希望使用的日期格式DimsupportedFormats()AsString=NewString(){”dd/MM/yyyy”}'现在会转换成机器支持的result=DateTime.ParseExact(dateString,supportedFormats,System.Globalization.CultureInfo.CurrentCulture,System.Globalization.DateTimeStyles.None)ReturnTrueCatchexAsExceptionReturnFalseEndTry我对Function有同样的问题。Excel工作表中的日期列为dd/MM/yyyy。但是根据我的系统设置,数据格式是MM/dd/yyyy。因此,如果日期是2013年7月31日,则日期字段显示空字符串。使用IMEX1和“Microsoft.ACE.OLEDB.12.0”驱动程序解决了这个问题。“提供程序=Microsoft.ACE.OLEDB.12.0;数据源=“+文件路径+”;扩展属性='Excel12.0;HDR=是;IMEX=1;'”但“提供程序=Microsoft.Jet.OLEDB.4.0;”+"DataSource="+FilePath+";ExtendedProperties=Excel8.0;IMEX=1"不起作用。以上是C#学习教程:从Excel工作表导入时DateTime格式不匹配。所有内容共享。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
