Вход | Регистрация

1С:Предприятие ::

Метки:OLE и COM

Как показать документ Excel после его открытия?

Я
   romix
 
30.04.04 - 12:17
Я делаю так (в процедура Сформировать()):

Таб.Записать("c:\ОтчетПоЛифтам.xls", "XLS");
ЗапуститьПриложение("c:\ОтчетПоЛифтам.xls");

Документ запускается, но тут же "прыгает" на задний план. Юзер должен догадаться, как его открыть. Как бы мне теперь сделать, чтобы Excel документ теперь попал на передний план?
 
  Рекламное место пустует
   Den
1 - 30.04.04 - 13:28
Попробуй открыть его не таким образом а через OLE. То есть создаешь OLE-объект Excel.Application и вызываешь его методы. Если  что, смотришь справку по VBA и еще есть прекрасный метод - запускаешь в Екселе запись макроса, делаешь, что хочешь, а потом препарируешь этот самый макрос на предмет необходимых методов и свойств.
   Den
2 - 30.04.04 - 13:29
Если совсем ничего не получится, пиши на мыло, пришлю образчик, правда не обещаю, что быстро
   Поп Гапон
3 - 30.04.04 - 13:43
Процедура ВывестиВЭксель(Таб, Файл, Лист, ЗащитаОтПерезаписи="", Эксель_="")
    Перем ВремФайл;
    
    Перем Эксель, ВнешнийЭксель;
    Перем РабочиеКниги;
    Перем НужнаяКнига, НашлиКнигу;
    Перем НомКниги, ВремКнига;
    Перем Листы, ИмяЛиста, НужныйЛист, НашлиЛист, НомЛиста;
    Перем Копировать;
    
    Перем ЯчейкаПервая;
    Перем Комментарий;
    Перем Рамка;
    Перем ФормаРамки;
    Перем Символы;
    
    ВремФайл = КаталогВременныхФайлов()+"tmp.xls";
    Таб.Записать(ВремФайл, 1);
    Если ФС.СуществуетФайл(ВремФайл)=0 Тогда
        Предупреждение("Невозможно создать и использовать файл "+ВремФайл);
        Возврат ;
    КонецЕсли;
    
    Если Эксель_="" Тогда
        Эксель = СоздатьОбъект("Excel.Application");
        ВнешнийЭксель = 0;
    Иначе
        Эксель = Эксель_;
        ВнешнийЭксель = 1;
    КонецЕсли;
    
    РабочиеКниги = Эксель.Workbooks;
    НужнаяКнига="";
    НашлиКнигу=0;
    Для НомКниги = 1 По РабочиеКниги.Count Цикл
        Если ВРЕГ(РабочиеКниги.Item(НомКниги).FullName) = ВРЕГ(Файл) Тогда
            НужнаяКнига = РабочиеКниги.Item(НомКниги);
            НашлиКнигу=1;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    Если НашлиКнигу=0 Тогда
        Если ФС.СуществуетФайл(Файл)=1 Тогда
            РабочиеКниги.Open(Файл);
            НужнаяКнига = РабочиеКниги.Item(РабочиеКниги.Count);
        Иначе
           //РабочиеКниги.Add();

           //НужнаяКнига = РабочиеКниги.Item(РабочиеКниги.Count);

            НужнаяКнига = РабочиеКниги.Add();
            НужнаяКнига.SaveAs(Файл);
        КонецЕсли;
    КонецЕсли;
    Листы = НужнаяКнига.WorkSheets;
    ИмяЛиста = Лист;
    НужныйЛист="";
    НашлиЛист=0;
    Для НомЛиста = 1 По Листы.Count Цикл
        Если ВРЕГ(Листы.Item(НомЛиста).Name) = ВРЕГ(ИмяЛиста) Тогда
            НужныйЛист = Листы.Item(НомЛиста);
            НашлиЛист=1;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    Копировать=1;
    Если НашлиЛист=0 Тогда
       //Листы.Add();

       //НужныйЛист = Листы.Item(Листы.Count);

        НужныйЛист = Листы.Add();
        НужныйЛист.Name = ИмяЛиста;
    Иначе
        Если ПустоеЗначение(ЗащитаОтПерезаписи)=0 Тогда
           //Если НужныйЛист.Comments.Count>0 Тогда

           //    ЯчейкаПервая = НужныйЛист.Cells;

           //    Комментарий = ЯчейкаПервая.Comment;

           //    ФормаРамки = Комментарий.Shape;

           //    Рамка = ФормаРамки.TextFrame;

           //    Символы = Рамка.Characters();

           //    Если ПустоеЗначение(Символы.text)=0 Тогда

           //        Предупреждение("На листе "+НужныйЛист.Name+" уже имеется информация."+Симв(13)+"Для того чтобы можно было вывести информацию поверх"+Симв(13)+"удалите примечание на первой ячейке (правой кнопкой мыши)");

           //        Копировать=0;

           //    КонецЕсли;

           //КонецЕсли;

           //Если Копировать=1 Тогда

           //    НужныйЛист.Range("A1").AddComment("Лист защищен:"+Симв(10)+"Удалите это примечание (правой кнопкой мыши) чтобы снять защиту");

           //КонецЕсли;

            Если 6 <> Вопрос("В книге "+НужнаяКнига.Name+" уже имеется лист "+НужныйЛист.Name+Симв(13)+""+Симв(13)+"Переписать его?", 4) Тогда
                Копировать=0;
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
    
    Если Копировать=1 Тогда
        РабочиеКниги.Open(ВремФайл);
        ВремКнига = РабочиеКниги.Item(РабочиеКниги.Count);
        ВремКнига.Sheets(1).Cells.Copy(НужныйЛист.Cells);
        ВремКнига.Close();
        НужнаяКнига.Activate();
        НужныйЛист.Activate();
        
        Если ВнешнийЭксель = 1 тогда
            Эксель.Visible = 0;
        Иначе
            Эксель.Visible = 1;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры
   Поп Гапон
4 - 30.04.04 - 13:48
(3) Ну там рихтанешь напильником, что-то там было намудреное. Общая идея - вывести в нужную книгу, в нужный лист.
Если в цикле процедуру вывода вызываешь, то вне цикла объяви Эксель, и подсунь ее процедуре(для надежности, не верю я виндам глючным).


Список тем форума
Рекламное место пустует   Рекламное место пустует
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование.
Фредерик Брукс-младший
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует