[英]Getting maximum row/column number from Excel Range
我有一定的Range
,例如:
Range rng = activeWorksheet.Range["A1", "B50"];
我一直在通过遍历该Range
并为变量分配行号来检索此Range
使用的最大行数和列数,但是必须有更好的方法吗? 我一直在这样做:
int maxRow = 0;
foreach (Range row in rng.Rows)
maxRow = row.Row;
我想我找到了最优雅的解决方案,例如:
int maxRow = rng.Row + rng.Rows.Count - 1;
int maxColumn = rng.Column + rng.Columns.Count - 1;
rng.Row
将检索范围内第一个使用的行号, rng.Rows.Count - 1
将检索该范围内使用的行总数,我们也减去1
得到正确的最大行号。
您如何搜索最后使用的行?
public int FindLastFilledRowInRange(Range range)
{
var cell = range.Find("*", SearchOrder: Excel.XlSearchOrder.xlByRows, SearchDirection: Excel.XlSearchDirection.xlPrevious);
return cell.Row;
}
如果您晚于第1行开始,则可以对返回的行做一些附加的数学运算...
如果您不介意使用“ .EntireRow.Address(False,False)”来评估字符串Address ...,我们将得到一个易于解析的字符串...
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
maxRow从9:11开始是11 ...如果未解析为int,则由于字符串排序,Max()将为9
maxCol是C:BB中的“ BB” ...如果未填充左,则由于字符串排序,Max()将是“ 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” ...即使范围不连续
这可以与整个“ A:A”列一起使用
这不适用于整个行选择“ 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将为您提供空行,在我的情况下我们没有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.