0x800a03ec при вызове Выбрать в диапазоне Excel (IRange). Диапазон был возвращен из используемого диапазона листа - PullRequest
1 голос
/ 07 ноября 2008

Я пытаюсь выбрать «используемый диапазон». Я получаю UsedRange на рабочем листе, а затем вызываю функцию Select для него. Я получаю HRESULT 0x800a03ec по вызову выбора.

Вот код:

COleVariant результат;

HRESULT hr = AutoWrap (DISPATCH_METHOD, & result, irange, L "Select", 0);

Я не буду публиковать код для функции AutoWrap (если кто-то не спросит). Это довольно хорошо известно, и я не изменил его.

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

Рабочий лист не заблокирован.

Я видел другие проблемы, связанные с Locale, и моя система настроена на английский язык США, как и моя учетная запись пользователя. Ни один не был изменен.

Надеюсь, кто-то может помочь!

Обновление : Я также пытался

hr = iRange->Select(vResult);

Это возвращает S_OK, но не выбирает диапазон. Обычно я не могу напрямую вызывать функции в структуре iRange; результат - нарушение gpf или доступа - поэтому я должен использовать функцию autowrap (для запуска вызова Invoke). Я не удивлен, что этот звонок не работает.

Я также попытался открыть файл excel в режиме без чтения, если меня заблокировали. Это не решило проблему. Я могу выбрать отдельные ячейки, получив один элемент (ячейку) из диапазона и вызвав его Select, но я не могу выбрать диапазон.

1 Ответ

3 голосов
/ 14 ноября 2008

Я нашел ответ на этот вопрос. Эта проблема возникает только при использовании в образце DSOFRAMER (Microsoft KB 311765). DSOFramer - это универсальный элемент управления ActiveX для встраивания документов MS Office. Проблема также возникает только в отладочной сборке; Выпуск сборок в порядке.

Я также нашел обходной путь, который работает при выпуске или отладке сборки: получить любую ячейку в диапазоне (используя get_Item), затем вызвать select для этого элемента, а затем снова выбрать, чтобы отменить его выбор. Как только это будет сделано, выбор может быть вызван на диапазон. Очевидно, что нельзя выбрать select в диапазоне, если ячейка уже выбрана (или, возможно, если состояние выбора не определено).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...