Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Копирование листов excel в одну книгу
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование управляемых форм 1С 8.2
logist
Есть процедура которая должна бы копировать листы в одну книгу, отрабатывает без ошибок, т.е. листы в новой книге создаются, но проблема в том что они пустые, т.е. содержимое листов не копируется. Что я делаю не так?
Процедура ПеренестиЛистВКнигу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
может
Лист.Worksheets(1).Copy(НовыйЛист);


????
logist
alex040269 Прогресс есть, но. Листы копируются с содержимым, но создаются новые листы по порядку, а добавленные с новыми именами так и пустые.
logist
Заменил это
Цитата(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-файлы (СписокФайлов - список значений) в одну книгу, имя листа в книге это имя файла с одним листом.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.