Range.address не совпадает с адресом range.cell[0]

Я разрабатываю плагин VSTO для Excel 2013 с использованием средств разработки Office для Visual Studio 2012, выпущенных в ноябре 2012 года.

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

var dataEntrySheet = (Worksheet)Globals.ThisAddIn.Application.Worksheets["Data Entry"];
var rangeAddress = dataEntrySheet.Range["A2"].Address
var cellAddress = dataEntrySheet.Range["A2"].Cells[0].Address

Результаты вышеупомянутого:

rangeAddress = "$ A $ 2"

cellAddress = "$ A $ 1"

Кто-нибудь знает, почему это происходит?

1 ответ

Решение

Это из-за индекса здесь:

Cells[0]

При доступе к строкам и столбцам в Excel индексы начинаются с 1. Таким образом, 0 фактически поднимается на одну строку вверх. Если бы вы сделали:

var cellAddress = dataEntrySheet.Range["A1"].Cells[0].Address

вы на самом деле получите исключение для попытки доступа к несуществующей строке. Вы можете даже использовать отрицательные индексы для доступа к строкам, которые находятся дальше.

Другие вопросы по тегам