Имя: Пароль:
1C
 
Как из двух табдоков сделать один excel-файл с двумя листами?
0 Лойфер
 
27.05.09
15:47
Добрый день!
Такая вот задача: надо чтобы отчёт формировался именно в эксель файле и листы были созданы в разрезе некоего значения. Я пошёл по такому пути: создаю два табдока, записываю их как xls и затем пытаюсь запхнуть в один эксель файл методом WorkBooks.Add(FilaPath). Но это явно не то.
Есть идеи? Подскажите пожалуйста!
1 KalachevDV
 
27.05.09
16:00
Почему не то? вполне рабочее решение, имхо самый легкий вариант. Только метод кажется не ADD а COPY.
2 Лойфер
 
27.05.09
16:07
Сopy - да, но это метод для листов. То есть я думаю надо так:
1. Открываю Add-ом две книги
2. Из одной книги копирую лист в другую
3. Сохраняю книгу с двумя листами...
Проблема в том, что не могу найти человеческого описания методов экселя, к тому же новый эксель ругается на старые файлы xls - которые создаёт 1Ска... Кажется Copy работает только с активным листом... Столько вопросов - аж беда :)
Но я правильно мыслю?
3 KalachevDV
 
27.05.09
16:13
в целом правильно. человеческое описание методов екселя - в справке к екселю.
Запускаешь на запись макрос. выполняешь необходимые действия. завершаешь запись макроса. Куришь код.
4 dk
 
27.05.09
16:17
сложно проверить? :)
---
Бук1 = Ех.WorkBooks.Add....
Бук2 = Ех.WorkBooks.Add....
//Лист1 = Бук1.WorkSheets(1)
Лист2 = Бук2.WorkSheets(1)
Лист2.Copy(Бук1.WorkSheets(2))
5 Лойфер
 
27.05.09
16:34
(4) Кстати, спасибо! Меня просто это ехель так напугал - то нельзя, это переполнение... Работает, только в последней строке Бук1.WorkSheets(1).
Вроде бы всё зашибись, но при открытии результирующего файла нельзя переключаться между листами. если минимизировать лист, то созданные листы видно.А панельки с закладочками Лист1, Лист2 - нету :(
Может подскажете где у меня лыжи не едут?
6 Лойфер
 
27.05.09
17:47
(3) А вот насчёт покурить макрос - супер идея, но не получается макросом :( Одноэсина сохраняет ТабДок в каком-то извращённом формате. Открываешь его в эхеле - появляется окно с таблицой, но БЕЗ закладочек-листов снизу. И добавить их вручную никак нельзя.
Может дело в том, что у меня office2007 ? Может 1С при выгрузке в эхель не поддерживает листы %( Я что-то ниччччегошеньки не понимаю :(
7 Лойфер
 
28.05.09
17:07
Решение найдено. Хочу сказать большое спасибо всем сочуствующим!

       ПутьКФайлу = "C:\test.xls"; // путь к конечному файлу
   
   // Формируем список листов
   // Имена листов должны совпадать с именами областей макета
   сзЛисты = Новый СписокЗначений;
   сзЛисты.Добавить("Лист1");
   сзЛисты.Добавить("Лист2");
   сзЛисты.Добавить("Лист3");
   
   // создаём отчёты из которых будет формироваться листы экселя
   Макет = ПолучитьМакет("Макет");
   ТабДок = Новый ТабличныйДокумент;
   Для каждого текЛист Из сзЛисты Цикл
       ТабДок.Очистить();
       Область = Макет.ПолучитьОбласть(текЛист.Значение);
       ТабДок.Вывести(Область);
       ТабДок.Записать(КаталогВременныхФайлов()+текЛист.Значение+".xls", ТипФайлаТабличногоДокумента.XLS);
   КонецЦикла;
   
   // создаём эксель-объект
   ЭксельОбъект = Новый COMОбъект("Excel.Application");
   ЭксельОбъект.DisplayAlerts = 0;    
   // создаём книгу по первому отчёту.
   // в неё будем копировать все остальные отчёты-листы
   Книга1 = ЭксельОбъект.WorkBooks.Add(КаталогВременныхФайлов()+сзЛисты[0].Значение+".xls");
   Лист1 = Книга1.WorkSheets(1);
   Лист1.Name = сзЛисты[0].Значение;
   
   Для й = 1 По сзЛисты.Количество()-1 Цикл // нулевой лист пропускаем
       Книга2 = ЭксельОбъект.WorkBooks.Add(КаталогВременныхФайлов()+сзЛисты[й].Значение+".xls");
       Лист2 = Книга2.WorkSheets(1);
       Лист2.Name = сзЛисты[й].Значение; // именуем экселевский лист        
       Лист2.Copy(, Книга1.WorkSheets(Книга1.WorkSheets.Count())); // вставляем после последнего листа        
       Книга2.Close(); // закрываем потому что переименовывали лист. Иначе выдаст диалог "Сохранить?"
   КонецЦикла;
   
   // наводим красоту
   Лист1.Select(); // выбираем первый лист, иначе он будет минимизированным - некрасиво    
   ЭксельОбъект.ActiveWindow.TabRatio = 0.8; // сделаем поле для закладок-листов пошире
   
   // закрываем эксель и сохраняем
   Книга1.SaveAs(ПутьКФайлу, 39); // для обратной совместимости 39 = xlExcel7 = xlExcel5
   Книга1.Close();
   ЭксельОбъект.DisplayAlerts = 1;
   ЭксельОбъект.Quit();
   
   // удаляем временные файлы
   Для каждого текЛист Из сзЛисты Цикл
       УдалитьФайлы(КаталогВременныхФайлов()+текЛист.Значение+".xls");
   КонецЦикла;
2 + 2 = 3.9999999999999999999999999999999...