Есть ли способ получить текст и положение курсора из строки формул в Excel?

Я хочу получить текущий текст (возможно, незафиксированный) из строки формул в Excel (из надстройки в процессе). Все "обычные" методы не работают, например GetWindowText(...) и т.д.

Что касается положения курсора: GetCaretPos на самом деле работает (возвращает координаты x, y каретки), но EM_CHARFROMPOS не работает (всегда возвращает 0), так что это тупик.

Предоставляется ли эта функциональность через COM или API XLL каким-либо образом?

РЕДАКТИРОВАТЬ: я также хотел бы отметить, что я думаю, что большинство моих проблем связано с тем, что панель формул (по крайней мере, я уверен на 99%) НЕ является элементом управления редактированием, что можно увидеть, посмотрев на его оконный класс.


person Steve    schedule 26.02.2011    source источник
comment
Не могли бы вы вернуться к началу и описать, чего вы на самом деле пытаетесь достичь, потому что может быть более одного способа снять шкуру с этого конкретного (метафорического) кота.   -  person dex black    schedule 28.02.2011
comment
Я не думаю, что есть другой способ сказать это. Мне нужен текущий текст и положение курсора из строки формул. Мой вопрос заключался в том, можно ли это сделать с помощью Excel COM API или XLL API (не с помощью ужасных хаков), что, похоже, не так.   -  person Steve    schedule 28.02.2011


Ответы (2)


Строка формул, да и большинство элементов управления в Office нестандартны. Отправка стандартных сообщений не приведет к успеху.

Я полагаю, что единственным вариантом будет реинжиниринг исполняемого кода.

person David Heffernan    schedule 26.02.2011

SteveN, какая версия Excel? Элемент управления будет окном. Office 2010 в этом отношении «лучше», поскольку использует больше стандартных элементов управления. Вы можете использовать Spy для просмотра всех сообщений, которые отправляются на этот элемент управления, и попытаться имитировать их, чтобы увидеть, что вы получите. Долгая дорога однако.

person dex black    schedule 27.02.2011
comment
Ни одно решение не будет работать для всех версий 2003+. 2007 сильно отличается от 2003 во многих важных аспектах. - person dex black; 28.02.2011
comment
Я покопался в 2003 и 2007 годах, и псевдополе редактирования очень похоже в обеих версиях. Оба имеют CS_OWNDC, что может указывать на то, что разработчик решил сделать весь рисунок напрямую. Это плохо для вас, потому что это может быть просто старое окно. Я не смог найти доказательств того, что это поле редактирования. Журналы сообщений от Spy говорят то же самое. Я подозреваю, что вы мертвы в воде. - person dex black; 28.02.2011
comment
Подклассы элемента управления также никуда не приведут, потому что вы не сможете «увидеть», что на самом деле нарисовано на DC, не захватив копию и (остановитесь прямо сейчас, возникает боль). - person dex black; 28.02.2011