Format DateTime discordance sur l'importation de Feuille de calcul Excel
Je suis de l'importation de données à partir d'une feuille Excel à une DataTable
en utilisant le code suivant:
OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName + ";Extended Properties=Excel 8.0");
con.Open();
_myDataSet = new DataSet();
OleDbDataAdapter myCommand = new OleDbDataAdapter(" SELECT * FROM [" + "Sheet1" + "$]", con);
myCommand.Fill(_myDataSet);
con.Close();
J'ai un Date
colonne de la feuille Excel dans le format dd/MM/yyyy
. Le code ci-dessus est un échec lorsque la date est dd/MM/yyyy
(eg. 27/12/2009
). Comment spécifier le format de la date?
MODIFIER (ajouter plus de détails):
Il n'est pas jeter de l'exception. Les données sont importées dans le DataSet
jusqu'à la ligne où une défaillance de Date
format est rencontré. J'ai la date dd/MM/yyyy
dans la feuille Excel. Lors de l'importation à l'aide de OleDbDataAdapter
, il est attendu de la date dans la feuille Excel pour être en MM/dd/yyyy
. Pas naturellement lorsqu'il rencontre une date comme 27/2/2009
il arrête le processus d'importation, si aucune erreur/exception est levée. Donc je vais avoir que des résultats partiels dans DataTable
.
S'il vous plaît aider.
Que voulez-vous dire que le code est en train d'échouer? Est-il une exception, ou les données sont tout simplement pas reconnus comme une date de temps?
Il n'est pas jeter de l'exception. Les données sont importées dans le jeu de données jusqu'à la ligne où est invalide format de la Date est rencontré. J'ai la date sous la forme jj/MM/aaaa dans la feuille excel. Lors de l'importation à l'aide de OleDbDataAdapter, il est attendu de la date dans la feuille excel pour être en MM/jj/aaaa. Pas tout naturellement, lorsqu'il rencontre une date comme "27/2/2009" arrêter le processus d'importation, si aucune erreur/Exception est levée. Svp aider!
OriginalL'auteur devnull | 2009-06-08
Vous devez vous connecter pour publier un commentaire.
Tirant de la Date ou d'autres mélanges de données-éléments de la colonne dans le passé a peu moi avec Excel.
Il semble que leur fournisseur de "pics" d'avance XX lignes (en fonction de la version de Fournisseur) pour déterminer quel est le type de colonne est au moment de l'exécution. L'avant de réponses qui concernent les propriétés de votre connexion m'ont aidé dans le passé, mais ne pas de l'aide lorsque vous avez VIDE dates et/ou des valeurs différentes dans la colonne elle-même - qu'il confond le pilote Excel.
Ce que je recommande que vous utilisez FileHelpers ou un autre tiers de la bibliothèque de la place. Infragistics Excel composant m'a traitée très bien, tandis que FileHelpers est opensource.
OriginalL'auteur Brett Veenstra
Lors de la liaison des feuilles de calcul Excel dans microsoft Access, un problème se pose lorsqu'une colonne a mélangé des types de données. Par exemple, si la première ligne dans la colonne "Texte" et le reste sont Numériques, les champs Numériques seront mis en forme en tant que Texte et #Erreur. De même, avec des Dates et les non-Dates de mélanger dans la même colonne.
Il y a quelques belles tentatives de réponses là-haut, mais ici, c'est la simple solution pour lire ces Mélangé types de données sans données erreur d'incompatibilité de type:
Essayez d'ajouter "IMEX=1" à votre MS Access SQL, tels que:
SÉLECTIONNER le Type, la Largeur, le Poids
DE [Excel 8.0;IMEX=1;DATABASE=C:\TEMP\MySpreadsheet.xls].MyExcelTable
Grâce,
Brian Jasmer
OriginalL'auteur
Vous pouvez utiliser de la Culture Britannique info pour analyser la date à de Britanniques Format jj/MM/AAAA
où "27/12/2009" est votre champ de date
OleDbDataReader
automatiquement convertit le texte en une date avant que vous pouvez même obtenir la valeur brute.OriginalL'auteur Stephen Binns
Le nombre de lignes ne vous ont, et sont toutes les cellules dans la colonne date dates de validité? Parfois, le OleDB routines identifie incorrectement une colonne de texte s'il y a une certaine incohérence dans les cellules dans les 8 premières lignes. (8 par défaut est le nombre de lignes qui est en lecture pour déterminer les types de données)
OriginalL'auteur John Weldon
peut-être essayer le formatage de la date de la colonne dans excel puis de l'importer?
OriginalL'auteur iceangel89
Vous voudrez peut-être vérifier que la culture actuelle, vous êtes en cours d'exécution prend en charge royaume-UNI dates de style.Voici un lien sur la façon de vérifier et le modifier au niveau de thread http://support.microsoft.com/kb/306162
La chaîne de connexion OleDb semble soutenir ";Identificateur de paramètres Régionaux=". Je pense que le eb-GB identificateur est 2057 (Ne pas citer de moi ;)), vous pouvez aussi donner un essai.
Comme pour les exceptions, de ne pas être jeté je pense que pendant le remplissage, vous pouvez regarder dans le RowUpdated événements que par ce lien http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbdataadapter.rowupdated(SV.80).aspx.
C'est la façon dont la méthode de Remplissage de la base de données fonctionne, il va quitter sur la ligne où il y a un problème, en utilisant les événements ci-dessus, vous pourriez avoir des options pour ignorer la ligne ou le reformatage.
OriginalL'auteur Matthew Pelser
Une chose que vous devez toujours spécifier dans votre chaîne de connexion est IMEX=1:
Il contribue à l'analyse des colonnes qui contiennent des nombres et des chaînes. Pourraient contribuer à la date de l'analyse en tant que bien, mais alors vous devez convertir manuellement toutes les dates:
OriginalL'auteur AareP
Façon sur la façon de remplir l'ensemble de données par programme plutôt que par l'intermédiaire d'un adaptateur de données?
OriginalL'auteur Maslow
Vous pouvez utiliser cette fonction pour formater quel que soit le format de date que vous avez reçu pour le format dont vous avez besoin.
Voici le code:
OriginalL'auteur
J'ai aussi été confronté au même Problème. La Date de colonne de la feuille Excel est jj/MM/aaaa. Mais comme pour mon système paramètres du format des données est MM/jj/aaaa. Par conséquent, si la date est le 31/07/2013 par exemple , le champ de la Date affichée comme une chaîne vide.
À l'aide de IMEX1 avec "de Microsoft.ACE.OLEDB.12.0" Pilote de Résoudre le Problème.
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Chemin + ";Extended Properties='Excel 12.0;HDR=Oui;IMEX=1;'"
Mais "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Chemin + "; Extended Properties=Excel 8.0;IMEX=1" ne fonctionne pas.
OriginalL'auteur user2588099