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

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 человек.
Рекламное место пустует