2016-02-15 50 views
0

我有一定的Range,例如最大行/列數:充分利用Excel範圍

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

我已經通過其循環和分配檢索這個Range使用的最大行數和列數行號給我的變量,但是必須有更好的方法?我一直在這樣做:

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

回答

2

我想我找到了這個像這樣最優雅的解決方案,東西:

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

rng.Row將檢索範圍內第一個使用的行號,rng.Rows.Count - 1將檢索在此範圍內使用的總行數,我們也扣除1以獲得正確的最大行數。

1

你如何尋找最後使用的行?

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

如果以後開始比第1行,你可以做在返回行一些額外的數學......

-1

我有這個在以前的項目:

wb = excel.Workbooks.Open(fileName); 
worksheet = wb.ActiveSheet;    
Range usedRange = worksheet.UsedRange; 

this.lastRow = usedRange.Rows.Count; 
this.lastCell = usedRange.Columns.Count; 

使用LASTROW會給你emptylines這在我的情況下,我們沒有用。

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的是從9:11 11 ...如果不是解析爲int,則MAX()是9由於字符串排序

MAXCOL是「BB」 從C: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是 「AE」 從C:AE ......即使與非連續範圍

這是否與整列選擇「A:A」工作

這並不全行選擇工作的「3:3」