2009-09-22 89 views
0

我有一个Excel文件,客户正在从他们的财务软件中提取并上传到我的Web应用程序。我需要通过ADO连接到文件并将其内容读入SQL数据库。ASP.NET OleDb Excel连接到工作表

问题是,来自财务软件的文件是独立的Excel工作表,而不是工作簿,因此没有发现可以连接到/打开它的软件(除了Excel)。无论我在OleDB连接器中使用什么连接字符串,都无法使其工作。

如果我在Excel中打开文件,那么只需保存它,我就可以连接并读取它。我写了一些代码来自动化Excel,使用Office互操作,打开/保存文件,并且它可以工作,但是我认为这是在服务器上做的基于测试和阅读的不好实践。

有谁知道我可以解决这个问题的方法?我见过一些第三方库,但它们非常昂贵。

在此先感谢。

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." 
     // 
     // 
    } 
} 

我不能把问题文件放在任何地方b/c它包含敏感数据。

+0

你可以发布一些示例代码? – RichardOD 2009-09-22 19:44:12

回答