Имя: Пароль:
1C
1С v8
Пытаюсь копировать лист из одного файла Ексель в другой файл
0 Birmingem
 
16.08.17
11:06
Пытаюсь копировать лист из одного файла Ексель в другой файл.
Создал макрос копирования листа. Там есть такая строка:

Sheets("ЛистИсточник").Copy After:=Workbooks("Прием.xls").Sheets(3)

Как теперь эту строку написать в модуле 1С?
Если писать так:

КнигаИсточник.Sheets("ЛистИсточник").Copy After:=КнигаПрием.Sheets(3)

то естественно ругается...
1 Ёпрст
 
гуру
16.08.17
11:16
: выкини
2 shadow_sw
 
16.08.17
11:16
Попытка
            Лист = Файл.Workbooks.Open(ФайлЛиста.Путь);
        Исключение
            Продолжить;
        КонецПопытки;
        Если ФайлЛиста.Путь =КаталогВременныхФайлов()+"Имя.xls" Тогда
            Лист.Worksheets(1).Name  = "Имя";
            Лист.Worksheets(1).Copy(Книга.Worksheets(1));
3 Birmingem
 
16.08.17
11:25
(1) КнигаИсточник.Sheets("ЛистИсточник").Copy After=КнигаПрием.Sheets(3)
Так? Все равно ругается на пробел между Copy и After.
(2) Это уже пробовал. Создает новый лист с именем "TDSheet" и пихает его перед всеми другими листами.
А надо чтобы создал лист с тем же именем, что в источнике, и поставил его после всех листов.
Для этого и запустил макрос. Вот только как теперь код этого макроса написать в 1С?
4 Вафель
 
16.08.17
11:27
В бэйсике процедуры без скобочек вызывваются, а в 1с со скобочками с перечислением всех параметров
5 Вафель
 
16.08.17
11:28
Смотри каким параметром по счету идет After
6 shadow_sw
 
16.08.17
11:40

Файл = Новый COMОбъект("Excel.Application");    
    ФСО = Новый COMОбъект("Scripting.FileSystemObject");
    
    ПутьКниги =КаталогВременныхФайлов()+"Основной.xls";
    СписокФайлов = Новый ТаблицаЗначений;
    СписокФайлов.Колонки.Добавить("Путь");
    НС = СписокФайлов.Добавить();
    НС.Путь =КаталогВременныхФайлов()+"Раз.xls";
    НС = СписокФайлов.Добавить();
    НС.Путь =КаталогВременныхФайлов()+"Два.xls";
    НС = СписокФайлов.Добавить();
    НС.Путь =КаталогВременныхФайлов()+"Три.xls";

    
    
    Файл.Visible = 0;    
    Файл.DisplayAlerts = 0;
    Попытка                          
        Книга = Файл.Workbooks.Open(ПутьКниги);
    Исключение
        Книга = Файл.Workbooks.Add();
        Книга.SaveAs(ПутьКниги);
    КонецПопытки;
    
    Для Каждого ФайлЛиста Из СписокФайлов Цикл
        НовоеИмяЛиста = ФСО.GetBaseName(ФайлЛиста.Путь);
        
        Попытка                          
            Лист = Файл.Workbooks.Open(ФайлЛиста.Путь);
        Исключение
            Продолжить;
        КонецПопытки;
        Если ФайлЛиста.Путь =КаталогВременныхФайлов()+"Раз.xls" Тогда
            Лист.Worksheets(1).Name  = "Раз";
            Лист.Worksheets(1).Copy(Книга.Worksheets(1));
            Лист.Close(0);
        КонецЕсли;    
        Если ФайлЛиста.Путь =КаталогВременныхФайлов()+"Два.xls" Тогда
            Лист.Worksheets(1).Name  = "Два";
            Лист.Worksheets(1).Copy(Книга.Worksheets(1));
            Лист.Close(0);
        КонецЕсли;
            Если ФайлЛиста.Путь =КаталогВременныхФайлов()+"Три.xls" Тогда
            Лист.Worksheets(1).Name  = "Три";
            Лист.Worksheets(1).Copy(Книга.Worksheets(1));
            Лист.Close(0);
        КонецЕсли;    

        
       Книга.Save();
    КонецЦикла;
    
    Книга.Save();
    Книга.Close(-1);
    Файл = 0;



Кусок из рабочего кода
7 shadow_sw
 
16.08.17
11:41
500 руб в фонд мисты
8 NorthWind
 
16.08.17
11:50
(0) https://msdn.microsoft.com/ru-ru/library/office/microsoft.office.interop.excel.sheets.copy.aspx
After - второй параметр метода Copy, значит, надо писать нечто вроде
Sheets("ЛистИсточник").Copy (, Workbooks("Прием.xls").Sheets(3))
9 NorthWind
 
16.08.17
11:51
MSDN - он хороший, он помогает :)
10 Birmingem
 
16.08.17
11:52
(5) Спасибо! Нарыл в инете: Copy(Before, After)
Т.е. у метода Copy два параметра: первый параметр - это "перед", второй - "после".
11 Вафель
 
16.08.17
11:53
можно прям в екселе, в редакторе нажать crtl + f1
12 Birmingem
 
16.08.17
11:57
(6) это то же самое что и в (2)
(8) да, спасибо, уже нашел
13 shadow_sw
 
16.08.17
11:59
(12) а кто сказал что за тебя буду переписывать код, я дал рабочий код, его можно переделать, при желании
14 Birmingem
 
16.08.17
12:15
(13)Спасибо! Но вопрос был не в том, как скопировать лист, а в том, как в 1С написать конкретный код макроса.
Ответ получен в (4) и (5).