Получить адрес диапазона в Excel, используя vb.net - PullRequest
1 голос
/ 20 января 2010

Я пытаюсь динамически получить диапазон ячеек в Excel, используя VS 2005 vb.net. Это работает oRange = oSheet.Range (oSheet.Cells ("A1"), ("U281")). Выберите, но "U281" не всегда будет последней ячейкой в ​​диапазоне. Так как бы мне динамически получить последнюю ячейку с данными в том же формате, что и U281.

Ответы [ 2 ]

2 голосов
/ 20 января 2010

Чтобы получить последнюю ячейку, используйте следующую формулу:

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

Это прекрасно работает, если только у вас нет пользователей, которые посещали какие-то странные области электронной таблицы и делали то, что с тех пор удалили.Приведенная выше формула вернет последнюю ячейку, где бы они ни находились, в странных путешествиях, даже если теперь она пуста.

В моем случае мне приходится обрабатывать каждую ячейку во многих электронных таблицах, где пользователь опустился на строку 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 голосов
/ 09 марта 2012

Вот преобразование версии 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...