繁体   English   中英

从Excel Range获取最大行数/列数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM