доступ к объектам Excel через WinAPI

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Аватара пользователя
AiK
Сообщения: 2287
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

А окно ли ячейка?
То, что окно, я в этом почти уверен. Но так же почти уверен, что у этого окна может быть собственная процедура прорисовки и WindowText у него просить бесполезно :)
Даже самый дурацкий замысел можно воплотить мастерски
MikeM
Сообщения: 23
Зарегистрирован: 25 апр 2005, 12:13

топикстартера наверное не WinAPI интересует, а работа с Excel из VB
Если бы VB обладал, достаточным набором средств, наверное я бы к WinAPI и не обращался, но похоже это единственное средство, чтобы справиться с моей задачей. Вообще эта тема продолжение другой моей темы "Определение длины текста" в мм или пикселях. В WinAPI есть (во всяком случае по описанию) функции, которые могут это сделать, но как добраться хотя бы до ячейки я не знаю... максимум до окна.
Вместе с Excel поставляется automatition server, который можно программно стартануть, загрузить в него Excel документ, затем спросить у сервера текст конкретной ячейки
Я видел подобные примеры, но здесь это не проходит (кстати и без этой техники можно несколькими способами получить доступ).
Дмит
Сообщения: 145
Зарегистрирован: 27 ноя 2004, 22:23
Контактная информация:

Есть пример: добавляет горизонтальную полосу прокрутки в окне списка, если строка слишком длинна.
Сделан на VB c API. Если нужен могу выложить.
Аватара пользователя
AiK
Сообщения: 2287
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

но как добраться хотя бы до ячейки я не знаю
Боюсь, что это у тебя не получится. Я ради эксперимента запустил рекурсивно EnumChildWindows, до ячеек она не добирается.
Даже самый дурацкий замысел можно воплотить мастерски
MikeM
Сообщения: 23
Зарегистрирован: 25 апр 2005, 12:13

Жаль... А тема всё-таки больше для раздела "WinAPI" подходит + больше шансов, что сведующий человек увидит.
Дмит, спасибо, но у меня уже столько примеров, книжек всяких и т.д., что дальше некуда.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Сорри, обратно переместить не могу: не в моей компетентности. Могу лишь обещать, что пока не буду удалять ссылку в разделе Win API, Shells :)
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
AiK
Сообщения: 2287
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

Подождём Наиля :)
Даже самый дурацкий замысел можно воплотить мастерски
MikeM
Сообщения: 23
Зарегистрирован: 25 апр 2005, 12:13

Дмит, я тут прикинул: если в примере есть обращение к списку по типу Книга-Лист-Список и всё через WinAPI, то было бы интересно взглянуть.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

AiK писал(а):
но как добраться хотя бы до ячейки я не знаю
Боюсь, что это у тебя не получится. Я ради эксперимента запустил рекурсивно EnumChildWindows, до ячеек она не добирается.

Тему обратно переносить нет смысла :)
Хорошая тема... Я ее теперь не отдам :)

Теперь по существу:

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

У всего Офиса есть прекрасное API - это COM-объекты (да еще с хорошо документированными интерфейсами).

Каждое офисное приложение - это внешний COM-сервер (EXE).
Раз внешний, то вы можете (по Вашему усмотрению) либо получить интерфейс к уже существующему инстансу, либо запустить новый.
Корнем объектной модели везде является объект Application.
Получив интерфейс объекта Application (существующего или нового) можно открыть справку по VBA и делать все что душе угодно.

Все остальное - ОТЪ ЛУКАВАГО :)
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Я ради эксперимента запустил рекурсивно EnumChildWindows
Кстати, не видел НИОДНОЙ реализации гридов, в которых бы ячейки являлись самостоятельными окнами.

PS
Не, ну конечно можно средствами WinAPI посылать оку Excel клавиши, клики мыши, другие события... Но не более того. Все остальное через COM.
Ответить