从Excel范围获取最大行/列号
本文关键字:列号 Excel 范围 获取 | 更新日期: 2023-09-27 18:34:41
我有一定的Range
,例如:
Range rng = activeWorksheet.Range["A1", "B50"];
我一直在通过循环遍历它并为我的变量分配行号来检索此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("我们得到一个很容易解析的字符串......
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 是 11 从 9: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 是 15 从 1:3,9:15,4:7 ...即使具有不连续的范围,并且无序引用= 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 会给你空行,在我的情况下我们没有用。