Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Копирование листов excel в одну книгу          
logist Подменю пользователя
сообщение 24.04.12, 9:32
Сообщение #1

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Есть процедура которая должна бы копировать листы в одну книгу, отрабатывает без ошибок, т.е. листы в новой книге создаются, но проблема в том что они пустые, т.е. содержимое листов не копируется. Что я делаю не так?
Процедура ПеренестиЛистВКнигу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;
КонецПроцедуры


Signature
Личные бесплатные консультации не даю, для этого есть форум!

Спасибо сказали: Trintintin,

alex040269 Подменю пользователя
сообщение 24.04.12, 9:56
Сообщение #2

Крутой
Иконка группы
Группа: Местный
Сообщений: 1626
Из: Гуляйполе
Спасибо сказали: 236 раз
Рейтинг: 0

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


????


Signature
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
ЗиУП

Спасибо сказали: logist,

logist Подменю пользователя
сообщение 24.04.12, 10:49
Сообщение #3

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

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


Signature
Личные бесплатные консультации не даю, для этого есть форум!

logist Подменю пользователя
сообщение 24.04.12, 17:05
Сообщение #4

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Заменил это
Цитата(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-файлы (СписокФайлов - список значений) в одну книгу, имя листа в книге это имя файла с одним листом.


Signature
Личные бесплатные консультации не даю, для этого есть форум!

Спасибо сказали: abrafaks, Trintintin, Vofka,

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 26.04.24, 18:15
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!