2010-04-15 24 views
0

J'utilise ASP.NET pour ouvrir un document Excel 2003 hébergé sur le serveur. La feuille de calcul Excel, produite par un système hors de mon contrôle, a 5 feuilles de calcul nommées. J'accès aux données dans chaque feuille comme suit (les sauts de ligne ajoutée pour une meilleure lisibilité):Erreur lors de l'accès à certaines feuilles Excel avec Jet

string ExcelConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\sample.xls; 
    Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1;\";"; 

OleDbDataAdapter myData = 
    new OleDbDataAdapter("SELECT * FROM [mysheet]", ExcelConn); 
myData.TableMappings.Add("Table", "mysheet"); 
myData.Fill(ExcelDS); 

Cela fonctionne pour 3 des 5 feuilles. Les deux autres lancer cette erreur:

The Microsoft Jet database engine could not find the object 'mysheet'. Make sure the object exists and that you spell its name and the path name correctly.

J'ai quadruple vérifié le nom de la feuille en examinant le texte dans l'onglet en bas et aussi en examinant la fin de la chaîne que ce produit dans Excel:

=CELL("filename") 
c:\[sample.xls]mysheet 

La chaîne de connexion est spécifiée une fois et réutilisée pour les 5 feuilles.

Est-il possible que je doive référencer la feuille avec une chaîne qui ne correspond pas au nom visible dans Excel? Peut-être des caractères cachés, des espaces, etc.? Y a-t-il un autre moyen de trouver le vrai nom de la feuille? D'autres suggestions pour récupérer ces données?

Note: Je ne peux pas modifier le document Excel (j'aurais utilisé SSIS pour importer CSV si je pouvais l'avoir à ma guise). J'utilise .NET 3.5/II6.

Répondre

1

Eh bien, j'ai trouvé un moyen de découvrir le nom réel de la feuille.

Utilisation de la chaîne de connexion à la question, je peux le faire ...

OleDbConnection conn = new OleDbConnection(ExcelConn); 
conn.Open(); 
... 
conn.Close(); 

Avec la connexion ouverte, je peux utiliser le débogueur pour récupérer les noms de feuille.

conn.GetSchema("Tables").Rows[0]["TABLE_NAME"] 
conn.GetSchema("Tables").Rows[1]["TABLE_NAME"] 
... 
conn.GetSchema("Tables").Rows[9]["TABLE_NAME"] 

J'ai trouvé qu'il y avait 10 noms de feuille dans le document Excel. Les 2 feuilles qui causaient des erreurs avaient des noms similaires post-fixés avec un "$". Je pense que je suis dans un cauchemar de soutien que je suis prêt à parier que quelqu'un a joué avec le document Excel avant de me l'envoyer - mais au moins je sais comment tirer les données.