J'utilise OleDB DataReader pour obtenir des données de mes fichiers Excel (mais ce problème se produit également dans DataTable.Fill). La chose est que j'ai une colonne qui devrait renvoyer des chaînes. Tout va bien et fonctionne mais récemment, un problème est survenu, car les cellules de la colonne avaient des formats différents. Certains étaient en nombre et d'autres en texte. Quand j'ai vérifié en utilisant dataReader.GetSchema() il a montré que la colonne en question était inférée comme type System.String. Le problème avec ceci était que toutes les cellules non-text étaient immédiatement mises à null. Y a-t-il un moyen de suggérer au lecteur que cette colonne doit simplement analyser les colonnes en tant que System.Object au lieu de déduire cela comme System.String et en vidant toutes les cellules non-string?Problème de formatage de cellule Excel
La chaîne de connexion J'utilise est:
chaîne connString = "Provider = Microsoft.Jet.OLEDB.4.0;" + "Data Source =" + filePath + ";" + "Propriétés étendues = Excel 8.0;";
et le code est:
using (OleDbConnection connection = new OleDbConnection(connString))
{
connection.Open();
foreach (string worksheetName in worksheetNames)
{
using (OleDbCommand command =
new OleDbCommand("SELECT * FROM [" + worksheetName + "]", connection))
{
TEntity entity;
using (OleDbDataReader dataReader = command.ExecuteReader())
{
while (dataReader.Read())
{
entity = GetDataFromDataTable(dataReader);
if (entity != null)
{
entityList.Add(entity);
}
}
}
}
}
connection.Close();
}
Merci. IMEX a travaillé. – Jonn
FYI: le MaxScanRows = 0 est ignoré lors de l'utilisation du fournisseur Microsoft.Jet.OLEDB.4.0; il scanne seulement les 8 premières rangées. Le fournisseur Microsoft.ACE.OLEDB.12.0 ne semble pas souffrir du même problème. Voir la section sur _Rows to Scan_ dans le [KB] (http://support.microsoft.com/default.aspx?scid=kb;en-us;257819) – codechurn