Существует довольно немного, я бы изменил об этом tbh. Итак, давайте посмотрим ...
- Я бы не использовал этот драйвер, так как он является обозревателем. Используйте Microsoft.ACE.OLEDB.12.0
- Для импорта смешанных типов данных необходимо указать IMEX = 1.
- Ваши расширенные свойства определяют импорт текстового файла, но вы сказали, что хотите импортировать Excel. Если это так, укажите это.
Обычно я читал эту таблицу за столом. Я не знаком с вашей попыткой прочитать лот в DataSet. Может быть, мне пора, если мне станет скучно в новом году. Этот пример будет работать, однако ...
string sConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" +
"Data Source=e:\\Test.xlsx;" +
"Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=1\"";
OleDbConnection oConnection = new OleDbConnection();
oConnection.ConnectionString = sConnectionString;
oConnection.Open();
//Find all readable Named Ranges and Worksheets
DataTable ExcelSheetNames = oConnection.GetSchema("Tables");
foreach (DataRow SheetNameRow in ExcelSheetNames.Rows)
{
string SheetName = (string)SheetNameRow["Table_Name"];
//Only handle WorkSheets. Named Ranges are otherwise named.
if (SheetName.EndsWith("$") | SheetName.EndsWith("$'"))
{
DataTable SheetContents = new DataTable();
//Read the contents of the sheet into a DataTable
using (OleDbCommand oCmd = new OleDbCommand("Select * From [" + SheetName + "]", oConnection))
{
SheetContents.Load(oCmd.ExecuteReader());
}
//You can also put the DataTable load on one line (I do)
//SheetContents.Load(new OleDbCommand("Select * From [" + SheetName + "]", oConnection).ExecuteReader());
//Print the content of cells A2..C2 to the console window
Console.WriteLine(SheetContents.Rows[0].ItemArray[0]);
Console.WriteLine(SheetContents.Rows[0].ItemArray[1]);
Console.WriteLine(SheetContents.Rows[0].ItemArray[2]);
}
}
oConnection.Close();
Кстати, пожалуйста, постарайтесь избежать использования «вар» переменных. Сильно наберите их, и вы спасете себя и других, страдающих от боли.
Если вы знаете имя листа вы хотите прочитать, вы можете просто закодировать все это, как ...
string sConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" +
"Data Source=e:\\Test.xlsx;" +
"Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=1\"";
OleDbConnection oConnection = new OleDbConnection();
oConnection.ConnectionString = sConnectionString;
oConnection.Open();
DataTable SheetContents = new DataTable();
SheetContents.Load(new OleDbCommand("Select * From [Sheet1$]", oConnection).ExecuteReader());
Console.WriteLine(SheetContents.Rows[0].ItemArray[0]);
Console.WriteLine(SheetContents.Rows[0].ItemArray[1]);
Console.WriteLine(SheetContents.Rows[0].ItemArray[2]);
oConnection.Close();