Если вам необходимо программно прочитать данные из Excel файла, это можно сделать с помощью ODBC. В данной статье я покажу как.
Итак у нас есть документ Excel в котором присутствуют некоторые данные, например такие как показано ниже:
Для того что бы иметь возможность обратится к ним из .NET кода через ODBC необходимо создать в системе соответствующий источник данных. Для этого заходим в Пуск->Панель Управления->Система и Безопасность->Администрирование->Источники данных (ODBC) и создаем источник данных на базе драйвера Excel:
Далее для этого источника данных необходимо указать название источника, его описание (на картинке ниже это TestExcel) и путь к Excel файлу, где находятся интересующие нас данные (на картинке ниже это D:\test.xls.
Итак, источник данных готов, теперь немного магии на C# и фокус готов. Для этого будем использовать соединение, команды и ридер ODBC. В общем код примерно такой:
using System;using System.Data.Odbc;
namespace ODBCExcel
{
class Program
{
static void Main(string[] args)
{
using (var connection = new OdbcConnection("DSN=TestExcel;"))
{
var command = new OdbcCommand("Select Title, Description, Id from [Sheet1$]", connection);
try
{
connection.Open();
OdbcDataReader reader = command.ExecuteReader();
var count = reader.FieldCount;
for (int i = 0; i < count; i++)
{
Console.Write(reader.GetName(i) + "\t");
}
Console.WriteLine();
while (reader.Read())
{
for (int i = 0; i < count; i++)
{
Console.Write(reader.GetValue(i).ToString() + "\t");
}
Console.WriteLine();
}
}
catch (Exception ex)
{
Console.Write(ex.Message);
}
}
Console.ReadKey();
}
}
}
Тут думаю все интуитивно понятно, поэтому объяснять нечего. В строке соединения указываем имя нашего ODBC источника, в SQL запросе название листа Excel (Sheet1) плюс магический символ доллара (куда же без доллара в наши дни) трактуется как название таблицы. Самая первая строка в файле Excel формирует поля таблицы, которые мы и запрашиваем в выражении Select у таблицы [Sheet1$]. Результат будет примерно такой:
Что собственно и требовалось получить.
Комментариев нет:
Отправить комментарий