2010-01-19 34 views
1

我想動態獲取使用VS 2005 vb.net的Excel中單元格的範圍。這適用於oRange = oSheet.Range(oSheet.Cells(「A1」),(「U281」))。選擇,但「U281」並不總是該範圍中的最後一個單元格。那麼我將如何動態獲取其中包含數據的最後一個單元格,格式與U281相同。使用vb.net在Excel中獲取範圍地址

回答

2

要獲得最後一個單元格,使用這個公式:

​​

這工作得很好,除非你有一些用戶誰已經到了電子表格的一些奇怪的領域,做的事情,他們已經因爲刪除。上述公式將返回最後一個單元格作爲他們去哪裏進行奇怪旅程的地方,即使它現在全部空白。

在我的情況下,我必須處理大量電子表格中的每個單元格,其中用戶下降到行60,741和列50,即使只有幾百行實際數據。爲了避免這個龐大的空白區域,你想要搜索有數據的最大行和最大列,並使用該單元格作爲你的數據單元格的右下角,如下所示(這是C#,但不應該是難以翻譯):

Microsoft.Office.Interop.Excel.Range maxCell = 
    (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[worksheet.Cells.Find("*", 
    (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, 1], 
    Microsoft.Office.Interop.Excel.XlFindLookIn.xlValues, 
    Microsoft.Office.Interop.Excel.XlLookAt.xlWhole, 
    Microsoft.Office.Interop.Excel.XlSearchOrder.xlByRows, 
    Microsoft.Office.Interop.Excel.XlSearchDirection.xlPrevious, 
    false, false, missing).Row, 
    worksheet.Cells.Find("*", 
    (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, 1], 
    Microsoft.Office.Interop.Excel.XlFindLookIn.xlValues, 
    Microsoft.Office.Interop.Excel.XlLookAt.xlWhole, 
    Microsoft.Office.Interop.Excel.XlSearchOrder.xlByColumns, 
    Microsoft.Office.Interop.Excel.XlSearchDirection.xlPrevious, 
    false, false, missing).Column]; 

這可以爲您節省大量的處理時間。

0

以下是Chris Latta的答案中的VB2008版本轉換。謝謝!

Dim maxCell As Microsoft.Office.Interop.Excel.Range 
    maxCell = DirectCast(xlWorkSheet.Cells(xlWorkSheet.Cells.Find("*", _ 
    DirectCast(xlWorkSheet.Cells(1, 1), Excel.Range), _ 
    Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlWhole, _ 
    Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlPrevious, False, False).Row, _ 
    xlWorkSheet.Cells.Find("*", DirectCast(xlWorkSheet.Cells(1, 1), Excel.Range), _ 
    Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlWhole, Excel.XlSearchOrder.xlByColumns, _ 
    Excel.XlSearchDirection.xlPrevious, False, False).Column), Excel.Range) 

    MsgBox(maxCell.Address)