-
Asail (25.01.07 23:16) [0]Столкнулся с такой проблемой:
нужно перебрать все открытые Workbooks. Задача вроде тривиальная, но в Excel 2003 столкнулся с тем, что если несколько раз запустить приложение Excel, то получается добраться только до книг из первого запущенного приложения. Привожу код:
ListBox.Clear;
try
XL := GetActiveOleObject('Excel.Application');
except
ShowMessage('Can''t connect to the opened excel application!');
Exit;
end;
try
for i := 1 to XL.Workbooks.Count do
ListBox.Items.Add(XL.Workbooks[i].FullName);
finally
XL := Unassigned;
end;
Пример последователности операций для демонстрации трабла:
1. Открываем 1-й экземпляр Excel
2. Открываем 2 книги (Book1 & Book2)
3. Открываем 2-й экземпляр Excel
4. Открываем в нем еще 2 книги (Book3 & Book4)
5. Запускаем мою прогу и получаем в ListBox: Book1,Book2.
Вопрос как добраться до Book3 и Book4?
Thanks -
> Вопрос как добраться до Book3 и Book4?
закрыть первый экземпляр :)
а зачем нужно именно GetActiveOleObject? -
Array © (26.01.07 11:06) [2]
> XL := GetActiveOleObject('Excel.Application');
а межет CreateOleObject('Excel.Application'); -
Asail (26.01.07 15:25) [3]
> а межет CreateOleObject('Excel.Application');
А чем это поможет? Нужно подключиться к уже запущенному экземпляру, не запуская нового.
> закрыть первый экземпляр :)
Не годиться... -
YurikGL © (26.01.07 22:27) [4]Что мешает все книги открывать в одном Excel-e ?
-
Asail (27.01.07 01:54) [5]
> Что мешает все книги открывать в одном Excel-e ?
Пользователь мешает. Открывает книги так, как ему вздумается, а потом предъявляет претензии. Кстати, в более старых версиях такой проблемы не было. -
> в более старых версиях такой проблемы не было
в каких это более старых версиях этого не было? -
Asail (29.01.07 18:02) [7]Может и ошибаюсь (нет возможности проверить), но по-моему в 97/2000 версиях нельзя было открыть несколько экземпляров Excel. Документов (книг) ск-ко хочешь, а апликация только одна.
Но, даже, если и нет - то как все-таки перебрать ВСЕ ОТКРЫТЫЕ книги? -
почитайте статью http://www.gekko-software.nl/Delphi/art13.htm . Там, правда, о Ворде, но общий принцип изложен. Только поздним связыванием Вы уже не обойдетесь.