У меня есть файл 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."
//
//
}
}
Я не могу поместить проблемный файл где-либо, поскольку он содержит конфиденциальные данные.