使用C#和OleDB读取Excel - 如何识别使用的范围?

时间:2011-02-10 05:16:09

标签: c#-2.0 oledb excel-2003

我正在使用旧的OleDBConnections和OleDBCommands阅读Excel文件。如何识别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,我该怎么办?

任何帮助都会很棒!

1 个答案:

答案 0 :(得分:2)

未尝试过,但我认为您可以先创建一个带有DataAdapter语句的SELECT * FROM [Sheet],然后在调用FillSchema之后使用该语句,之后您应该可以调用{ <1}}在您刚刚填写的.Columns.Count上。