我有一定的Range
,例如最大行/列數:充分利用Excel範圍
Range rng = activeWorksheet.Range["A1", "B50"];
我已經通過其循環和分配檢索這個Range
使用的最大行數和列數行號給我的變量,但是必須有更好的方法?我一直在這樣做:
int maxRow = 0;
foreach (Range row in rng.Rows)
maxRow = row.Row;
我有一定的Range
,例如最大行/列數:充分利用Excel範圍
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行,你可以做在返回行一些額外的數學......
我有這個在以前的項目:
wb = excel.Workbooks.Open(fileName);
worksheet = wb.ActiveSheet;
Range usedRange = worksheet.UsedRange;
this.lastRow = usedRange.Rows.Count;
this.lastCell = usedRange.Columns.Count;
使用LASTROW會給你emptylines這在我的情況下,我們沒有用。
如果你不介意用 「.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」