使用vb.net在Excel中获取范围地址

我想dynamic获取使用VS 2005 vb.net的Excel中的单元格的范围。 这工作oRange = oSheet.Range(oSheet.Cells(“A1”),(“U281”))。select,但“U281”不会一直是范围内的最后一个单元格。 那么我将如何dynamic地获取与U281相同格式的数据的最后一个单元格。

要获得最后一个单元格,请使用以下公式:

lastCell = oSheet.Cells.SpecialCells(XlCellType.xlCellTypeLastCell) 

这工作正常,除非你有一些用户已经到电子表格的一些奇怪的地方,并做了他们已经删除的东西。 上面的公式将返回最后一个单元格作为他们去哪里奇怪的旅程,即使它现在全部空白。

在我的情况下,我必须处理大量电子表格中的每个单元格,即用户下到行60,741和列50,即使只有几百行实际数据。 为了避免这个庞大的空白区域,你想要search的最大行和最大的列有数据,并使用该单元格作为您的数据的单元格的右下angular,如下所示(这是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]; 

这可以为您节省大量的处理时间。

这是从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)