Имя: Пароль:
1C
 
Как три ТабДокумент выгрузить в ексель на три листа ?
,
0 lamme
 
18.04.17
09:38
Вопрос в теме ..
Кто ниб сталкивался?

(вариант - сохранить отдельно в ексель и потом копировать-вставить в один - не предлагать. Один из табдокументов - огромный и 1С умирает со словами - не хватает памяти. Именно - при открытии файла и его копировании в буфер)
1 1dvd
 
18.04.17
09:39
через ексель.аппликейшн
2 lodger
 
18.04.17
09:41
Excel = Новый COMОбъект("Excel.Application");
а дальше курить маны экселя. там функций и методов пара-тройка десятков.
открыть лист, заполнить построчно, и два других так же. ничего из оперативки не крякнется просто так, если отдать команду на сохранение.
3 lamme
 
18.04.17
09:43
афигеть .. сначала заполняем табдок
потом заполняем ексель на основе табдок
?
4 lamme
 
18.04.17
09:45
пытался сделать так

Попытка
    Эксель  = Новый COMОбъект("Excel.Application");
    Эксель2  = Новый COMОбъект("Excel.Application");

Исключение
    Предупреждение("ОШИБКА создания приложения Excel, возможно программа не установлена!");
КонецПопытки;

ПутьКФайлу ="C:\Users\Home\Desktop\тмп\док1.xls";
Книга = Эксель.WorkBooks.Open(ПутьКФайлу);



ПутьКФайлу2 ="C:\Users\Home\Desktop\тмп\док2.xls";
Книга2 = Эксель2.WorkBooks.Open(ПутьКФайлу2);
Лист2 = Книга2.WorkSheets(1); // Выбор первого листа.

   Книга2.Application.Sheets(1).Cells.Select();
   Эксель2.Selection.Copy();      

  
  
Лист = Книга.WorkSheets.Add();
Лист.Name = "лист ++";


            Эксель.DisplayAlerts = 0;
      //  Попытка    
            Лист.Paste();
            



Книга.SaveAs("C:\Users\Home\Desktop\тмп\док123.xls");
Эксель.Application.Quit();



так дома работает
но дома были файлы с листами руками сделанные.
на работе - нет. табдок сохраняется в ексель. листа нет. и все .. не работает.
или не работает по иной причине ..
яхз
5 Остап Сулейманович
 
18.04.17
09:45
(3) Разрешаю "Табдок" не заполнять. Заполнять напрямую книгу Ексель.
6 lodger
 
18.04.17
09:47
(5) +1. зачем вам табдок?
7 lamme
 
18.04.17
09:48
а есть пример заполнения ексель напрямую ?
8 Остап Сулейманович
 
18.04.17
09:48
(4) Вместо
Книга = Эксель.WorkBooks.Open(ПутьКФайлу);
писать
Книга = Эксель.WorkBooks.Add(ПутьКФайлу);

Затем
Для поз = 1 По 10 Цикл
  Лист = Книга.WorkSheets.Add(); //в справке посмотреть параметры
КонецЦикла;
9 lamme
 
18.04.17
09:49
табдок - это типа с него началось. потом аппетиты выросли. потом еще придумали ...
табдок остался
и при этом хотят в три листа в одном документе
10 lodger
 
18.04.17
09:51
(9) ну поставь параметр ВыводитьТабДокИлиЭксель. и в зависимости от него работай с макетами и табдоками или с экселем.
11 Йохохо
 
18.04.17
09:52
а если просто скопировать лист из файла в текущий?
12 lamme
 
18.04.17
09:53
(11)
в (4) код
не хочет он работать ..
13 Остап Сулейманович
 
18.04.17
09:53
(11) Стесняюсь спросить - это о программном заполнении? Или руцями?
14 shadow_sw
 
18.04.17
09:54

    Файл = Новый 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;

держи, 500 руб на счет мисты
15 Остап Сулейманович
 
18.04.17
09:56
(12) В (4) код заточен под :
1. Файл эксель уже существует.
2. Один лист уже есть.

3. Вот это вот :
   Лист = Книга.WorkSheets.Add();
   Лист.Name = "лист ++";
- в топку. Каждый лист должен иметь уникальное имя.
16 lamme
 
18.04.17
10:04
(14)
это раюботает - если в исходной книге есть листы
а если их нет - то не работает
17 lodger
 
18.04.17
10:07
(16) ну ясен красен. код под это и заточен. переписывайте заново и будет все работать под чистый документ.
18 rabbidX
 
18.04.17
14:21
Если ПерваяСтраница Тогда
                Лист = Книга.ActiveSheet;
                ПерваяСтраница = Ложь;
            Иначе
                Лист= Книга.Sheets.Add();
            КонецЕсли;