|
Редактирование 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) :) ..."вот только, конечно, нет там всяких формул и списков"
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |