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
вы на самом деле получите исключение для попытки доступа к несуществующей строке. Вы можете даже использовать отрицательные индексы для доступа к строкам, которые находятся дальше.