我正在使用旧的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,我该怎么办?
任何帮助都会很棒!
答案 0 :(得分:2)
未尝试过,但我认为您可以先创建一个带有DataAdapter
语句的SELECT * FROM [Sheet]
,然后在调用FillSchema
之后使用该语句,之后您应该可以调用{ <1}}在您刚刚填写的.Columns.Count
上。