Страница 2 из 2

Добавлено: 27 июл 2005, 17:43
AiK
А окно ли ячейка?
То, что окно, я в этом почти уверен. Но так же почти уверен, что у этого окна может быть собственная процедура прорисовки и WindowText у него просить бесполезно :)

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

Добавлено: 27 июл 2005, 21:04
Дмит
Есть пример: добавляет горизонтальную полосу прокрутки в окне списка, если строка слишком длинна.
Сделан на VB c API. Если нужен могу выложить.

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

Добавлено: 28 июл 2005, 16:00
MikeM
Жаль... А тема всё-таки больше для раздела "WinAPI" подходит + больше шансов, что сведующий человек увидит.
Дмит, спасибо, но у меня уже столько примеров, книжек всяких и т.д., что дальше некуда.

Добавлено: 28 июл 2005, 16:11
Romeo
Сорри, обратно переместить не могу: не в моей компетентности. Могу лишь обещать, что пока не буду удалять ссылку в разделе Win API, Shells :)

Добавлено: 29 июл 2005, 00:54
AiK
Подождём Наиля :)

Добавлено: 29 июл 2005, 11:46
MikeM
Дмит, я тут прикинул: если в примере есть обращение к списку по типу Книга-Лист-Список и всё через WinAPI, то было бы интересно взглянуть.

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

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

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

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

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

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

Все остальное - ОТЪ ЛУКАВАГО :)

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

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