Имя: Пароль:
1C
1С v8
Редактирование Excel из 1С
0 AlexeyAlexey Alexey
 
02.08.12
14:24
Коротко: задача создать обработку, которая будет создавать файлы Excel с данными. Чтобы не программировать всякие там линии и формулы, было решено сделать шаблон файла. Шаблон файла поместили в макет типа "Active Document". Далее берем этот самый шаблон, заполняем данными и сохраняем. Все пока получается, но файл после сохранения в Excel открывается скрытым, и приходится жать Окно/Отобразить. Это неудобно, но никак не получается, чтобы был открытым изначально.
Вот код:

Excel = Новый COMОбъект("Excel.Application");
МакетШаблонаТабеля = ПолучитьМакет("МакетШаблонаТабеля");
ШаблонТабеля = МакетШаблонаТабеля.Получить();

пока заполнения данными нет, сохраняем просто шаблон

ШаблонТабеля.SaveAs(КаталогВыгрузки+"\"+"3333.xls");
1 AlexeyAlexey Alexey
 
02.08.12
14:31
Люди, помогите, пожалуйста
2 AlexeyAlexey Alexey
 
02.08.12
14:41
...
3 Fish
 
02.08.12
14:44
А что нужно? открыть сохранённый шаблон?
4 manyak
 
02.08.12
14:44
excel.visible=true?
5 Fish
 
02.08.12
14:45
Вот код:
   Попытка
       Excel = Новый COMОбъект("Excel.Application");
   Исключение
       Сообщить("ОШИБКА! Приложение MS Excel отутствует или недостаточно прав доступа!
                |    - " + ОписаниеОшибки(), СтатусСообщения.ОченьВажное);
       Возврат;
   КонецПопытки;
   
   // Откроем табличный документ
   ЭлементыФормы.ТабличныйДокумент.Записать(КаталогВременныхФайлов() + "tmpxls.xls", ТипФайлаТабличногоДокумента.XLS);
   
   Excel.Workbooks.Open(КаталогВременныхФайлов() + "tmpxls.xls");
   
   tmpBook = Excel.Workbooks.Item(Excel.Workbooks.Count);
   
   КнигаExcel = Excel.Workbooks.Add();
   ЛистExcel = КнигаExcel.WorkSheets.Item(1);
   
   tmpBook.Sheets(1).Cells.Copy(ЛистExcel.Cells);
   tmpBook.Close();
   
   КнигаExcel.Activate();
   ЛистExcel.Activate();
   
   Excel.Visible = 1;
6 AlexeyAlexey Alexey
 
03.08.12
06:39
(3) Нужно открыть сохраненный шаблон, который сохранен в обработке в макетах
7 AlexeyAlexey Alexey
 
03.08.12
06:40
(4) Не работает в моем примере, пробывал
8 AlexeyAlexey Alexey
 
03.08.12
06:43
(5) В данном случае шаблон открывается из каталога временных файлов, а я хотел бы из макета типа Active Document. К тому же, как я понимаю, в данном случае предлагается создавать файл и копировать в него шаблон. Ну вообщем, попробую такой вариант, может он будет даже более качесвтенным, что файл создается каждый раз новый, а не шаблон сохраняется многократно как у меня.
9 Светлый Гений
 
03.08.12
07:45
(0) Попробуй так:

XLS = Новый COMОбъект("Excel.Application");
XLS.Visible = True;
МакетШаблона = ПолучитьМакет("ШаблонЭксель");
ШаблонЭксель = МакетШаблона.Получить();    

ИмяФайла = КаталогВыгрузки+"\new file.xls";
ШаблонЭксель.SaveAs(ИмяФайла);
Книга = XLS.Workbooks.Open(ИмяФайла);

Правда у меня почему-то совсем пустой файл сохраняется, но зато остается открытым :)
10 AlexeyAlexey Alexey
 
03.08.12
07:56
(9) Я уже продвинулся дальше, как косвенно посоветовали в (5) я сделал цепочку не извлечение шаблона/редактирование/сохранение, а извлечение шаблона/создание файла, копирование в шаблон/сохранение файла. У меня получилось сейчас так.
11 AlexeyAlexey Alexey
 
03.08.12
07:59
(9) Я уже продвинулся дальше, как косвенно посоветовали в (5) я сделал цепочку не извлечение шаблона/редактирование/сохранение, а извлечение шаблона/создание файла, копирование в шаблон/сохранение файла. У меня получилось сейчас так.

+ Code

       //ПРОВЕРКА
       //Для начала проверим, что работа с Excel поддерживается
       Попытка
           Excel = Новый COMОбъект("Excel.Application");
       Исключение
           Сообщить("Не удалось инициализировать Excel");
           Возврат;
       КонецПопытки;
                         
       //После распакуем файл шаблона из настроек
       Попытка
           МакетШаблонаТабеля = ПолучитьМакет("МакетШаблонаТабеля");
           ШаблонТабеля = МакетШаблонаТабеля.Получить();
       Исключение
           Сообщить("Не удалось получить шаблон табеля");
           Возврат;
       КонецПопытки;
       
       //СОЗДАНИЕ НОВОГО ФАЙЛА
       Книга = Excel.WorkBooks.Add();
       Лист = Книга.WorkSheets(1);
       
       //ЗАПОЛНЕНИЕ ФАЙЛА
       //Лист "Основной табель"
       ШаблонТабеля.WorkSheets("Основной табель").Cells.Copy(Лист.Cells);
       //Заголовок
       ШаблонТабеля.WorkSheets("Основной табель Шаблоны").Range("A1:Z3").Copy(Лист.Range("A1:Z3"));
       //Область для каждого сотрудника
       ШаблонТабеля.WorkSheets("Основной табель Шаблоны").Range("A4:AK13").Copy(Лист.Range("A4:AK13"));
       Лист.Rows("4:13").Group();
       ШаблонТабеля.WorkSheets("Основной табель Шаблоны").Range("A4:AK13").Copy(Лист.Range("A14:AK23"));
       
       //ЗАПИСЬ ФАЙЛА ИЗ ШАБЛОНА
       Книга.SaveAs(КаталогВыгрузки+"\"+"3333.xls");
       Excel.Application.Quit();

Это все работает, сейчас тружусь над тем, чтобы группировки, которые создаются командой Group() сворачивались не вниз (как всегда в Excel по умолчанию), а вверх.
12 Светлый Гений
 
03.08.12
08:22
(11)Мне кажется, что все-таки проще было бы открыть шаблон, наполнить, а потом сохранить и снова открыть, чем копировать листы в новый файл. Но проблема в том, что он как-то странно сохраняется..
13 AlexeyAlexey Alexey
 
07.08.12
10:49
(12) Вот то то и оно, я гуглил, и выяснил, что это не только из 1С такие проблемы. Поэтому развиваю вариант (11), вполне работает.
14 smaharbA
 
07.08.12
10:55
бред
15 smaharbA
 
07.08.12
11:02
ШаблонТабеля.савеас(...)
ШаблонТабеля.апликатион.визибле=-1
ШаблонТабеля.апликатион.виндовстате=-4137
ШаблонТабеля.виндовс.итем(1).визибле=-1
ШаблонТабеля.виндовс.итем(1).виндовстате=-4137
ШаблонТабеля.виндовс.итем(1).активате
16 smaharbA
 
07.08.12
11:03
задом наоборот
17 AlexeyAlexey Alexey
 
22.08.12
11:11
Внимание! Вообщем я решил задачу, которая стояла до этого. Результат был вполне хорошим, но тут один программист мне подсказал решение, которое гораздо интереснее в принципе. Тем, кто формирует что-либо в Эксель, может быть интересно. Можно софрировать обыкновенный табличный документ в 1С и с помощью команды    

ТабДок.Записать("D:\ВотФайл.xls",ТипФайлаТабличногоДокумента.XLS);

сохранить его в файл экселя.

Как результат, работает в разы быстрее, вот только, конечно, нет там всяких формул и списков, но это можно добить, открыв файл. В моем случае это проще и быстрее.
18 palpetrovich
 
22.08.12
11:15
(17) :) ..."вот только, конечно, нет там всяких формул и списков"
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн