![]() |
![]() |
|
Как из двух табдоков сделать один 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"); КонецЦикла; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |