Подключение ASP.NET OleDb Excel к рабочему листу

У меня есть файл Excel, который клиент извлекает из своего финансового программного обеспечения и загружает в мое веб-приложение. Мне нужно подключиться к файлу через ADO и прочитать его содержимое в базе данных SQL.

Проблема в том, что файл, исходящий от финансового программного обеспечения, представляет собой отдельный рабочий лист 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."
         //
         //
    }
}

Я не могу никуда поместить проблемный файл, потому что он содержит конфиденциальные данные.


person Kyle    schedule 22.09.2009    source источник
comment
Можете ли вы опубликовать пример кода?   -  person RichardOD    schedule 22.09.2009


Ответы (1)


Я использовал Excel Data Reader для чтения файлов Excel. Это бесплатно.

person Jay Riggs    schedule 22.09.2009