В этой статье опишу как прочитать Excel с помощью OleDB.
Иногда бывает нужно вытянуть таблицу из Excel документа, записать в DataTable для последующей обработки.
Не всегда это удобно делать с помощью циклов, поэтому будем считывать таблицы, содержащиеся в документе и запрашивать из них данные с помощью SQL запросов.
Определение строки подключения
Для разных версий Excel будут свои строки подключения.
Строка подключения для Excel 2007 и более новых версий
//Можно использовать, если количество строк менее 65536 Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes' //Если строк больше 65536 Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}; Extended Properties="Excel 12.0 Xml;HDR=YES";
Для работы с данными версиями необходимо установить Microsoft Access Database Engine 2010 Redistributable.
Так же C# может выбрасывать исключения по поводу недостающих драйверов. В этом случае необходимо скачать соответствующие драйверы с сайта Microsoft.
Строка подключения для более ранних версий
Строка подключения для Excel версии 2003 может иметь такой вид:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes'
Если C# выбросит исключение, скачайте недостающий драйвер, Visual Studio подскажет, какой.
Как сделать SQL запрос из таблицы Excel
Для выполнения SQL запроса нужно найти таблицу в документе и выполнить к ней запрос:
//Объявляем OleDB соединение using(OleDbConnection conn = new OleDbConnection(conStr)) { //Открываем подключение conn.Open(); //Запрашиваем таблицы DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); DataRow schemaRow = schemaTable.Rows[0]; //Получаеи имя таблицы string sheet = schemaRow["TABLE_NAME"].ToString(); //Объявляем команду OleDbCommand com = conn.CreateCommand(); //Создаем SQL запрос com.CommandText = "SELECT * FROM [" + sheet + "]"; //Выполняем SQL запрос OleDbDataReader reader = com.ExecuteReader(); //Записываем результат в DataTable DataTable table = new DataTable(); table.Load(reader); //Выводим DataTable в таблицу на форму (если нужно) gridControl1.DataSource = table; }
На этом шаге мы имеем считанные данные из Excel документа в DataTable.
После обработки данных можно сохранить данные в другой документ или оформить сводную таблицу.
Как работать с Excel с помощью C# обсуждалось ранее.
Так же можете посмотреть, как работать со сводными таблицами в Excel с помощью C# и редактора VBA, встроенного в Excel.