2016-11-16 7 views
0

У меня возникли проблемы с доступом к именованной ячейки в Excel из C# с помощью Excel Interop, когда ячейка скрыта, и я к нему доступ, как так:Excel Interop COMException HRESULT: 0x800A03EC при доступе к скрытой ячейки

bool SomeBoolean = WorkSheet.Range["MyRangeName"].Value; 

Диапазон свойство неявно вызывает get_range, когда я обращаюсь к нему, и это то, что бросает исключение в соответствии со стеком. Код, используемый для прямого вызова get_range, и который имел аналогичные результаты.

Если я обнаруживаю ячейки, он работает нормально. Если я перехожу через код по строкам, он отлично работает (это всегда разочаровывает ситуацию).

Конечно, я могу решить эту проблему, скрывая ячейки, но я хотел бы попытаться найти более элегантное решение. Я просмотрел документацию MSDN и несколько потоков здесь, но я ничего не могу найти. Любая помощь приветствуется!

MSDN страница Worksheet.Range: https://msdn.microsoft.com/en-us/library/office/ff836512.aspx

+0

Я не могу повторить эту проблему. Я знаю, что в прошлом я имел доступ к скрытым диапазонам - Interop (или VBA, если на то пошло) никогда не заботится. Напротив, я должен уйти с дороги, чтобы избежать скрытых диапазонов. Я проверил это как тест, и я серьезно не могу заставить его выбросить эту ошибку. Можете ли вы загрузить свою электронную таблицу (или соответствующую ее часть) DropBox или что-то подобное? Мне очень любопытно. – Hambone

ответ

0

Спасибо всем за то, чтобы помочь мне решить эту загадку. Во время моей отладки я заметил, что иногда это сработало, таинственно, а иногда и нет, и я просмотрел код, ведущий к рассматриваемой строке.

Причиной этой проблемы является то, что диапазон просматривается на листе, который задан как текущий выбранный лист во время вызова плагина. Поэтому, если правильная вкладка в книге не выбрана во время разговора, она терпит неудачу. Если он выбран, он преуспевает. Как оказалось, это не имеет ничего общего с скрытыми ячейками. Скорее разочаровываю, но, по крайней мере, теперь мы знаем!

1

Это дизайн. По определению скрытые ячейки недоступны.

Попробуйте сами. Создайте рабочий лист в Excel, скройте некоторые столбцы и затем выполните поиск (по значениям, а не формулам) для значения в скрытой ячейке. Появится диалоговое окно, указывающее, что значение не может быть найдено.

Если вы не согласны с этим поведением, обратитесь к Microsoft.

enter image description here

+0

Спасибо за ваш ответ, Дэн. Я попробовал то, что вы предложили, и увидел то же сообщение, что и вы. Код, с которым я работаю, - это .Net-переписывание старого VBA-плагина, который мы унаследовали (файл XLAM). Трудность в том, что этот плагин VBA не имеет проблем с доступом к скрытым значениям ячеек, что меня сбивает с толку. Имеет смысл, что, если он никогда не доступен, и это по дизайну, я не должен иметь доступ к нему с помощью C#. Но почему же работает VBA? Я не очень опытен с программированием на Excel, поэтому, возможно, мне что-то не хватает ... –

+0

Хм, не отлаживая его или проверяя сборку interop, я не уверен. Если это было мое приложение, я бы просто отобразил ячейки, прежде чем получить их ценность. Работа с межсетевыми окнами Office редко бывает элегантной. Другим решением может быть использование сторонней библиотеки, такой как EPPlus, но я не уверен, что делает ваш макрос. –

Смежные вопросы