从Excel范围获取最大行数/列数

我有一定的Range ,例如:

 Range rng = activeWorksheet.Range["A1", "B50"]; 

我一直在检索这个Range使用的最大行数和列数,循环遍历它并为我的variables赋一个行号,但是一定有更好的办法吗? 我一直在这样做:

 int maxRow = 0; foreach (Range row in rng.Rows) maxRow = row.Row; 

我想我find了最优雅的解决scheme,就像这样:

 int maxRow = rng.Row + rng.Rows.Count - 1; int maxColumn = rng.Column + rng.Columns.Count - 1; 

rng.Row将检索范围内第一个使用的行号, rng.Rows.Count - 1将检索在此范围内使用的总行数,我们也扣除1以获得正确的最大行数。

你如何search最后使用的行?

 public int FindLastFilledRowInRange(Range range) { var cell = range.Find("*", SearchOrder: Excel.XlSearchOrder.xlByRows, SearchDirection: Excel.XlSearchDirection.xlPrevious); return cell.Row; } 

如果你晚于第一行开始,你可以在返回的行上做一些额外的计算。

如果您不介意使用“.EntireRow.Address(False,False)”来计算stringAddress …,那么我们会得到一个易于parsing的string…

C#…

 int maxRow = range.EntireRow.Address(false, false).Split(",:".ToCharArray()).Select(n => int.Parse(n)).Max(); string maxCol = range.EntireColumn.Address(false, false).Split(",:".ToCharArray()).Select(s => s.PadLeft(3)).Max().Trim(); 

VB …;

 Dim maxRow As Integer = -1 Dim maxCol As String = "" range = ws.Range("$BB9:$C11") maxRow = range.EntireRow.Address(False, False).Split(",:".ToCharArray()).Select(Function(n) Integer.Parse(n)).Max() ' 9:11 maxCol = range.EntireColumn.Address(False, False).Split(",:".ToCharArray()).Select(Function(s) s.PadLeft(3)).Max().Trim() ' C:BB 

给定范围BB9:C11

从9:11开始,maxRow是11 …如果不parsing为int,那么由于stringsorting,Max()将是9

maxCol从C:BB的“BB”…如果没有填充左边,那么由于stringsortingMax()将是“C”

 range = ws.Range("A1:A3,AE15:AE9,C4:C7") maxRow = range.EntireRow.Address(False, False).Split(",:".ToCharArray()).Select(Function(n) Integer.Parse(n)).Max() ' 1:3,9:15,4:7 maxCol = range.EntireColumn.Address(False, False).Split(",:".ToCharArray()).Select(Function(s) s.PadLeft(3)).Max().Trim() ' 1:3,9:15,4:7 

并给定范围非连续范围:A1:A3,AE15:AE9,C4:C7

maxRow在1:3,9:15,4:7之间为15 …即使是非连续的范围,并且不按顺序参考= AE15:AE9

maxCol是C:AE中的“AE”,即使是非连续的范围

这是否适用于整个COLUMNselect“A:A”

这不适用于整行select“3:3”

我以前的项目是这样的:

 wb = excel.Workbooks.Open(fileName); worksheet = wb.ActiveSheet; Range usedRange = worksheet.UsedRange; this.lastRow = usedRange.Rows.Count; this.lastCell = usedRange.Columns.Count; 

使用lastRow会给你在我的情况下我们没有用的emptylines。