Я читаю файл Excel, используя старые добрые OleDBConnections и OleDBCommands. Как определить используемый диапазон листа Excel?
Например, если бы я использовал InterOp, я всегда могу сделать это -
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xWb;
Excel.Worksheet xWs;
Excel.Range range;
xWb = xlApp.Workbooks.Open(@"D:\Technical\C#\WorkingFolder\HelloWorld.xls", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
xWs = (Excel.Worksheet)xWb.Worksheets.get_Item(1);
range = xWs.UsedRange;
Теперь я получаю список всех используемых столбцов. С OleDB как мне это получить. Теперь, даже если бы я записал список столбцов, как я узнаю, что строки заканчиваются здесь.
По сути, мое требование таково.
Я собираюсь получить файл Excel (2003). Данные всегда будут включать заголовки (то есть имя столбца). Это не значит, что данные всегда будут заполняться с A1: J200
Это также может быть от A5: J204 тоже.
Итак, при использовании OleDBCommand
string sConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Technical\C#\WorkingFolder\HelloWorld.xls;Extended Properties=""Excel 8.0;HDR=YES;""";
string sCommandString = "SELECT Employee_Id, First_Name FROM [Sheet1$A1:J200]";
OleDbConnection xlConnection = new OleDbConnection(sConnectionString);
xlConnection.Open();
OleDbCommand xlCommand = new OleDbCommand(sCommandString, xlConnection);
OleDbDataAdapter tempDataAdapter = new OleDbDataAdapter();
tempDataAdapter.SelectCommand = xlCommand;
DataTable tempDataTable = new DataTable("Whatever_I_Want");
tempDataAdapter.Fill(tempDataTable);
Теперь линия
sCommandString имеет жестко заданное значение A1: J200, что если я получу Excel с диапазоном данных A5: 204, что мне делать?
Любая помощь будет отличной!