Версия для печати темы (https://pro1c.org.ua/index.php?s=90f3b20337601d6d718294367356ba95&showtopic=7121)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование управляемых форм 1С 8.2 _ Копирование листов excel в одну книгу

Автор: logist 24.04.12, 9:32

Есть процедура которая должна бы копировать листы в одну книгу, отрабатывает без ошибок, т.е. листы в новой книге создаются, но проблема в том что они пустые, т.е. содержимое листов не копируется. Что я делаю не так?

Процедура ПеренестиЛистВКнигуExcel(ПутьКниги, ПутьЛиста, НовоеИмяЛиста) Экспорт
    Файл = Новый COMОбъект("Excel.Application");    
    Файл.Visible = 0;    
    Файл.DisplayAlerts = 0;
    Попытка                          
        Книга = Файл.Workbooks.Open(ПутьКниги);
    Исключение
        Книга = Файл.Workbooks.Add();
        Книга.SaveAs(ПутьКниги);
    КонецПопытки;
    
    Попытка                          
        Лист = Файл.Workbooks.Open(ПутьЛиста);
    Исключение
        Файл = 0;
        Возврат;
    КонецПопытки;
    
    Попытка                          
        Книга.Worksheets(НовоеИмяЛиста).Delete();
    Исключение
    КонецПопытки;
    
    // Скопировать лист из Лист в Книга:
    НовыйЛист = Книга.Worksheets.Add();
    НовыйЛист.Name = НовоеИмяЛиста;
    НовыйЛист.Copy(Лист.Worksheets(1));
    Лист.Close(0);
    Книга.Save();
    Книга.Close(-1);
    Файл = 0;
КонецПроцедуры

Автор: alex040269 24.04.12, 9:56

может

Лист.Worksheets(1).Copy(НовыйЛист);


????

Автор: logist 24.04.12, 10:49

alex040269 Прогресс есть, но. Листы копируются с содержимым, но создаются новые листы по порядку, а добавленные с новыми именами так и пустые.

Автор: logist 24.04.12, 17:05

Заменил это

Цитата(logist @ 24.04.12, 10:32) *
    НовыйЛист = Книга.Worksheets.Add();
    НовыйЛист.Name = НовоеИмяЛиста;
    НовыйЛист.Copy(Лист.Worksheets(1));

на это
    Лист.Worksheets(1).Name = НовоеИмяЛиста;
    Лист.Worksheets(1).Copy(Книга.Worksheets(1));

работает smile.gif

В результате оптимизации, вышло вот что:
Процедура ПеренестиЛистыВКнигуExcel(ПутьКниги, СписокФайлов) Экспорт
    Файл = Новый COMОбъект("Excel.Application");    
    ФСО = Новый COMОбъект("Scripting.FileSystemObject");
    
    Файл.Visible = 0;    
    Файл.DisplayAlerts = 0;
    Попытка                          
        Книга = Файл.Workbooks.Open(ПутьКниги);
    Исключение
        Книга = Файл.Workbooks.Add();
        Книга.SaveAs(ПутьКниги);
    КонецПопытки;
    
    Для Каждого ФайлЛиста Из СписокФайлов Цикл
        НовоеИмяЛиста = ФСО.GetBaseName(ФайлЛиста.Значение);
        
        Попытка                          
            Лист = Файл.Workbooks.Open(ФайлЛиста.Значение);
        Исключение
            Продолжить;
        КонецПопытки;
        
        Попытка
            Лист.Worksheets(1).Name = НовоеИмяЛиста;
        Исключение
            Лист.Worksheets(1).Name = НовоеИмяЛиста+"A";
        КонецПопытки;
        Лист.Worksheets(1).Copy(Книга.Worksheets(1));
        Лист.Close(0);
        УдалитьФайлы(ФайлЛиста.Значение);
        //Книга.Save();
    КонецЦикла;
    
    Книга.Save();
    Книга.Close(-1);
    Файл = 0;
КонецПроцедуры

Вдруг кому пригодится. Перегоняет однолистовые xls-файлы (СписокФайлов - список значений) в одну книгу, имя листа в книге это имя файла с одним листом.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua