Как получить данные из таблицы (листа) Excel SQL запросом?
Данные из листа Excel, подключенного через ADO, можно показать в DBGrid, добавлять, править, удалять строки. Используем подключение из предыдущего примера.
Delphi:
ADODataSet1.Connection := Conn;
ADODataSet1.CommandText := 'select * from [Лист1$]'#10 + 'where [HireDate] >= #01/01/1994#'; ADODataSet1.Open;
// Можно использовать именованную область ячеек, названную "MyRange"
ADODataSet1.CommandText := 'select * from MyRange'; ADODataSet1.Open;
// Возможно использовать указаную область ячеек
ADODataSet1.ParamCheck := False; // ОБЯЗАТЕЛЬНО, иначе exception!!!
ADODataSet1.CommandText := 'select * from [Лист1$A12:F42]';
C#:
System.Data.OleDb.OleDbCommand oCmd = new System.Data.OleDb.OleDbCommand(); System.Data.OleDb.OleDbDataAdapter oAdapt = new System.Data.OleDb.OleDbDataAdapter(); System.Data.DataSet oDS = new System.Data.DataSet("DbDemos"); oCmd.Connection = oConn; // Выборка данных из одной таблицы (листа) с именем "Employee" oCmd.CommandText = "select * from [Employee$]"; // Выборка данных из именованной области ячеек c именем "MyRange" oCmd.CommandText = "select * from MyRange"; // Выборка из заданной области ячеек oCmd.CommandText = "select * from [Employee$A10:F40]"; // Выборка из 3 связанных таблиц (листов) книги oCmd.CommandText = "SELECT O.OrderNo, O.SaleDate, O.PaymentMethod, O.ItemsTotal,\n" + "E.FirstName, E.LastName, C.Company\n" + "FROM [customer$] AS C\n" + " INNER JOIN ([employee$] AS E\n" + " INNER JOIN [orders$] AS O ON E.EmpNo = O.EmpNo)\n" + " ON C.CustNo = O.CustNo"; // Получам данные в DataSet посредством OleDbDataAdapter'а oAdapt.SelectCommand = oCmd; oAdapt.Fill(oDS, "Employee"); // Покажем данные в DataGrid'е dataGrid1.DataSource = oDS.Tables["Employee"];
Внимание! Если данные были получены в DataSet из именованной области ячеек, то, при попытке добавить новые строки, вы получите исключение "Cannot expand named range". Если данные были получены с указанием области ячеек, то новые записи будут добавляться после последней строки диапазона, но, если будет вызван метод Requey, эти новые строки не будут включены в DataSet.
Retrieve and Edit Excel Data with ADO
How to query and display excel data by using ASP.NET, ADO.NET, and Visual C# .NET
You receive error messages when you try to use ADO.NET OLEDbDataAdapter to modify an Excel workbook
How To Use ADO with Excel Data from Visual Basic or VBA