2010-01-11 5 views
2

J'ouvre une feuille de calcul Excel dans un DataTable en utilisant OleDb comme ceci:Excel à travers OleDb montre les nombres différemment ... selon si la feuille de calcul est ouverte?

string select = string.Format("SELECT * FROM [{0}$]", worksheetName); 
using (var con = new OleDbConnection(connectionString)) 
using (var adapter = new OleDbDataAdapter(select, con)) 
{ 
    con.Open(); 
    var dt = new DataTable(); 
    adapter.Fill(dt); 
    con.Close(); 
    return dt; 
} 

Puis boucle I à travers les rangées de datatable de lecture différents bits de données comme ceci:

decimal charge; 
bool isChargeReadable = 
    decimal.TryParse(row["Charge"].ToString(), out charge); 

J'ai découvert tout à l'heure, mon code s'étouffait sur des cellules avec des montants en dollars tels que "$ 1100.00", qu'il ne peut pas analyser en décimal. Pas si surprenant ... sauf que c'est un code qui fonctionnait parfaitement avant tout à l'heure. Une autre enquête a révélé que si je cours ce code alors que le classeur est ouvert, il voit l'une de ces cellules comme "1100". Si je l'exécute alors que le classeur est fermé, il voit "$ 1100.00".

Pourquoi cela se produit-il? Évidemment, je vais devoir retravailler mon code pour fonctionner pendant que le classeur est fermé, mais pourquoi cela ferait-il une différence? J'aurais pensé que ce serait juste de lire le classeur enregistré.

La chaîne de connexion J'utilise est ce ...

"Provider=Microsoft.Jet.OLEDB.4.0; 
    Data Source={0}; 
    Extended Properties=""Excel 8.0;HDR=NO;IMEX=1"";" 

... où {0} est remplacé par le nom du fichier Excel, bien sûr.

Répondre

0

J'ai trouvé que mes opérations oledb fonctionnent mieux dans Excel avec un ensemble de nombres IMEX =. Peut-être que votre problème est là?

+0

Avez-vous vu la chaîne de connexion que j'ai incluse? –

+0

OH, je voulais dire sans un IMEX. J'ai eu le temps du diable de faire n'importe quoi avec oledb pour exceller jusqu'à ce que j'ai enlevé le drapeau IMEX =. Faute de frappe. – MAW74656

+0

Voir http://support.microsoft.com/kb/194124/EN-US/ pour plus d'informations sur les paramètres IMEX. – MAW74656

Questions connexes