2009-09-22 11 views
0

J'ai un fichier Excel que le client tire de son logiciel financier et le télécharge sur mon application Web. J'ai besoin de se connecter au fichier via ADO et lire son contenu dans une base de données SQL. Le problème est que le fichier qui provient du logiciel financier est une feuille de calcul Excel autonome, pas un classeur, donc aucun logiciel (en dehors d'Excel) que j'ai trouvé ne peut se connecter/l'ouvrir. Quelle que soit la chaîne de connexion que j'utilise dans le connecteur OleDB, je n'arrive pas à le faire fonctionner.ASP.NET OleDb Excel Connexion à la feuille de travail

Si j'ouvre le fichier dans Excel, il suffit de le sauvegarder, je peux me connecter et le lire correctement. J'ai écrit du code pour automatiser Excel, en utilisant Office interop, qui ouvre/enregistre le fichier, et cela fonctionne, mais j'ai conclu que c'est une mauvaise pratique à faire sur un serveur, basé sur les tests et la lecture.

Est-ce que quelqu'un sait d'une façon que je peux contourner ce problème? J'ai vu des bibliothèques tierces, mais elles sont très chères.

Merci d'avance.

HttpPostedFile jvFile = FileUpload1.PostedFile; 
string jvPath = Path.Combine(Server.MapPath("~"), Path.GetFileName(jvFile.FileName)); 
jvFile.SaveAs(jvPath); 

string[] begins = { 
         "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=", 
         "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=", 
        "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=", 
        "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=", 
        "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=", 
        "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=", 
        "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=", 
        "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" 
        }; 
string[] ends = { 
        ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1;\"", 
        ";Extended Properties=\"Excel 8.0;HDR=Yes;\"", 
       ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"", 
       ";Extended Properties=\"Excel 12.0 Xml;HDR=YES\"", 
       ";Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\"", 
       ";Extended Properties=\"Excel 12.0;HDR=YES\"", 
       ";Extended Properties=\"Excel 12.0 Macro;HDR=YES\"", 
       ";Extended Properties=\"text;HDR=Yes;FMT=Delimited\"", 
       ";Extended Properties=\"text;HDR=Yes;FMT=Fixed\";" 
       }; 

for(int i = 0; i < begins.Length; i++) 
{ 
    StringBuilder sbExcelFileConnStr = new StringBuilder(); 
    sbExcelFileConnStr.Append(begins[i]); 
    sbExcelFileConnStr.Append(jvPath); 
    sbExcelFileConnStr.Append(ends[i]); 

    OleDbConnection dbConn = new OleDbConnection(sbExcelFileConnStr.ToString()); 
    string[] excelSheets = { }; 
    try 
    { 
     dbConn.Open(); 
    } 
    catch (Exception ex) 
    { 
     // fails here with "System.Data.OleDb.OleDbException: 
     // External table is not in the expected format." 
     // 
     // 
    } 
} 

Je ne peux pas mettre le fichier de problème n'importe où b/c il contient des données sensibles.

+0

Pouvez-vous poster un exemple de code? – RichardOD

Répondre

Questions connexes