Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / [игнор отключен] [закрыт для гостей] / COM, ms word / 19 сообщений из 19, страница 1 из 1
21.11.2011, 18:05
    #37537370
jeep81
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM, ms word
Здравствуйте! Подскажите пожалуйста как на основе шаблона создать документ?
Есть такая функция
Функция ПолучитьМакетMSWord(знач ДвоичныеДанныеМакета, знач ИмяВременногоФайла = "") Экспорт

Handler = Новый Структура("Тип", "DOC");
Попытка
COMОбъект = Новый COMОбъект("Word.Application");

Исключение
ВызватьИсключение(НСтр("ru = 'Ошибка при работе с приложением Microsoft Word. Необходимо проверить правильность установки приложения.'")
+ Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;

#Если НЕ ВебКлиент Тогда
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("DOC");

ДвоичныеДанныеМакета.Записать(ИмяВременногоФайла);
#КонецЕсли


Попытка
COMОбъект.Documents.Open(ИмяВременногоФайла);
Исключение
COMОбъект.Quit(0);
COMОбъект = 0;
Handler.COMОбъект = 0;
УдалитьФайлы(ИмяВременногоФайла);
ВызватьИсключение(НСтр("ru = 'Ошибка при открытии файла шаблона.'") + Символы.ПС
+ КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;

Handler.Вставить("COMСоединение", COMОбъект);
Handler.Вставить("ИмяФайла", ИмяВременногоФайла);
Handler.Вставить("ЭтоМакет", Истина);

Handler.Вставить("НастройкиСтраницыМакета", Новый Соответствие);

Для Каждого ИмяНастройки Из НастройкиПараметровСтраницы() Цикл
Попытка
Handler.НастройкиСтраницыМакета.Вставить(ИмяНастройки, COMОбъект.ActiveDocument.PageSetup[ИмяНастройки]);
Исключение
// Пропустить, если настройка не поддерживается данной версией программы.
КонецПопытки;
КонецЦикла;

Возврат Handler;

КонецФункции

Но к сожалению она открывает документ на основе normal.dot а не на основе переданного двоичными данными макета ДвоичныеДанныеМакета. Может нужно как-то иначе открыть док?
...
Рейтинг: 0 / 0
21.11.2011, 19:09
    #37537487
COM, ms word
Попробуй вместо
Код: plaintext
1.
COMОбъект.Documents.Open(ИмяВременногоФайла);

сделать
Код: plaintext
1.
COMОбъект.Documents.Add(ИмяВременногоФайла);
...
Рейтинг: 0 / 0
22.11.2011, 11:22
    #37538210
jeep81
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM, ms word
Дмитрий Зайцев,

А как сделать что-то вроде
пДок = COMОбъект.Documents.Open(ИмяВременногоФайла);
пДок.AttachedTemplate = Template;

Только вот естественно это не работает тк это не визуал бэйсик. Помнится мне что там должен быть метод доступный у всех объектов для установки свойств?
Вроде бы Set? Те что-то вроде
пДок.AttachedTemplate.Set("Path",Template);

Может подскажите?
...
Рейтинг: 0 / 0
22.11.2011, 13:59
    #37538581
jeep81
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM, ms word
jeep81,
Народ, подскажите кто знает?
Уже все перепробовал. Как подменить шаблон у документа? Не открывает он как положено документ на основе .dot .
...
Рейтинг: 0 / 0
22.11.2011, 16:06
    #37538834
Zerro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM, ms word
jeep81,

мне просто малость смысл не понятен..ты хочешь брать и заполнять бланк какой то? а сделать просто папочку куда складывать эталон а потом пересохранять куда нужно не пойдет? мы так вроде делали
...
Рейтинг: 0 / 0
22.11.2011, 17:30
    #37539042
jeep81
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM, ms word
Zerro,
Это не я хочу. Это стандартный механизм так сделан. Как я понял он работает.
Забыл упомянуть это в версии 8.2. Там все это делается на клиенте.
В макете в двоичных данных сохраняется шаблон ворда, который передается в функцию - ПолучитьМакетMSWord(знач ДвоичныеДанныеМакета, знач ИмяВременногоФайла = "") .
Далее он сохраняется в временную папку клиента.
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("DOC");
ДвоичныеДанныеМакета.Записать(ИмяВременногоФайла);

А затем открывается
COMОбъект.Documents.Open(ИмяВременногоФайла);

А дальше после открытия вызываются всякие разные заполнялки шаблона после получения макета с помощью этой функции.
Но это уже не важно. Главное что шаблон открывается на основе Normal.dot, а не на основе подсунутого. Смысл этого ковыряния заключается в том, что было обнаружено, что на разных компах, когда документ выводится на печать в ворд выглядит по разному!
А нужно чтоб одинаково везде.
...
Рейтинг: 0 / 0
22.11.2011, 17:32
    #37539047
jeep81
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM, ms word
Zerro,

Ну вот так тут и делается, только не работает как нужно. Шаблон вроде как без стилей чтоли выводится? В общем по разному выглядит.
...
Рейтинг: 0 / 0
22.11.2011, 17:34
    #37539052
DmitriyZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM, ms word
jeep81, в макете хранится не шаблон (не .dot). Все правильно открывается. Что значит выглядит по разному на разных компах? Поясните.
...
Рейтинг: 0 / 0
22.11.2011, 17:47
    #37539084
jeep81
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM, ms word
DmitriyZ,
Если не шаблон то что? Я нормально его открыл вордом и это шаблон. Просто его в двоичных данных зачем-то хранят (может так проще или для чего-то нужно).
Объясняю что значит он выглядит по разному.
На одном компе открываю - табличка выглядит как нужно( выравнивание по левому краю, нет отступов итд), на другом открываю - отсупы, переносы итд
...
Рейтинг: 0 / 0
22.11.2011, 20:00
    #37539285
DmitriyZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM, ms word
jeep81DmitriyZ,
Если не шаблон то что? Я нормально его открыл вордом и это шаблон. Просто его в двоичных данных зачем-то хранят (может так проще или для чего-то нужно).
Объясняю что значит он выглядит по разному.
На одном компе открываю - табличка выглядит как нужно( выравнивание по левому краю, нет отступов итд), на другом открываю - отсупы, переносы итд там обычный файл *.doc с определенными тегами в нужных местах, куда нужно данные подставлять. Смотрите на компах настройки ворда. И попробуйте этот макет сохранить как *.doc и открыть полученнй файл на проблемном рабочем месте. Возможно, ситуация проясниться (может там дефолтный шаблон нормал исправили и сохранили).
...
Рейтинг: 0 / 0
23.11.2011, 00:46
    #37539578
jeep81
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM, ms word
DmitriyZ,

Так вот я о том же. То что вы Дмитрий сказали этож очевидно. Но я то и пытался сказать, что хочется сделать так, чтобы открывался документ на основе шаблона сохраненного, чтобы какие бы там по умолчанию шаблоны не были установлены, то всегда бы был приоритетным тот на основе которого создан документ. Те чтобы было все равно где я открываю этот документ. :) Я сегодня перерыл весь мсдн, но что-то пути не нашел.
...
Рейтинг: 0 / 0
23.11.2011, 09:35
    #37539759
DmitriyZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM, ms word
jeep81DmitriyZ,

Так вот я о том же. То что вы Дмитрий сказали этож очевидно. Но я то и пытался сказать, что хочется сделать так, чтобы открывался документ на основе шаблона сохраненного, чтобы какие бы там по умолчанию шаблоны не были установлены, то всегда бы был приоритетным тот на основе которого создан документ. Те чтобы было все равно где я открываю этот документ. :) Я сегодня перерыл весь мсдн, но что-то пути не нашел. Вот пример кода:
Код: plaintext
1.
2.
3.
	
Ворд = Новый COMОбъект("Word.Application");
Ворд.Documents.Add("C:\Program Files\Microsoft Office\Templates\1049\MedianLetter.Dotx",Ложь, 0 );
Ворд.Visible = Истина;

Он создает новый документ на основе стандартного вордовского шаблона и показывает его.
...
Рейтинг: 0 / 0
07.12.2011, 13:43
    #37562962
jeep81
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM, ms word
DmitriyZ,

А вы не скажите как мне передать в вордовскую функцию перечисление из 1С
Вот такаяфункция, но здесь ругается .
Range.PasteAndFormat(ПечатнаяФорма.COMСоединение.wdFormatOriginalFormatting);
...
Рейтинг: 0 / 0
07.12.2011, 14:10
    #37563026
DmitriyZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM, ms word
jeep81, используйте числовой аналог системного вордовского перечисления (см. Object browser)
...
Рейтинг: 0 / 0
07.12.2011, 14:37
    #37563111
jeep81
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM, ms word
DmitriyZ,

Не наверно не то.
В общем я подробнее расскажу по проблеме и может быть вы знаете как ее решить.
В общем это процедура печати. В ней открывается макет в котором док вордовский И открывается печатная форма тоже вордовская.
Но В первом случае открывается шаблон простой документ с настроенными стилями и форматированием. А во втором просто документ по умолчанию, те на основе шаблона нормал дот. Те в первом Documents.Open(путькфайлу), а во втором Documents.Add().
Затем в шаблоне ищутся теги для замены типа {v8 nametag } копируются и вставляются в Печатную форму-простой вордовский док. Но при вставке форматирование и стили не копируются.
Там используются такие методы:
ОбластьВставки.Paste()
ПечатнаяФорма.COMСоединение.ActiveDocument.Sections(1).Headers.Item(1).Range.Paste();

Я пробовал заменить на:
ПечатнаяФорма.COMСоединение.ActiveDocument.Sections(1).Headers.Item(1).Range.PasteAndFormat(12);// wdFormatOriginalFormatting = 12? я думаю
ОбластьВставки.PasteAndFormat(12)
Но на самой первой строке ПечатнаяФорма.COMСоединение.ActiveDocument.Sections(1).Headers.Item(1).Range.PasteAndFormat(12);
Вылезает ошибка что такоего метода не существует.

Вот помгите мне пожалуйста с этим разобраться. :)
...
Рейтинг: 0 / 0
07.12.2011, 15:21
    #37563235
DmitriyZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM, ms word
jeep81, для начала Const wdFormatOriginalFormatting = 16 (&H10)
...
Рейтинг: 0 / 0
07.12.2011, 16:53
    #37563489
jeep81
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM, ms word
DmitriyZ,

Я посмотрел, этот метод не получиться. В общем этот метод не пойдет наверно, там потому что в буфер кладется. А этот метод для тогд чтобы выделенные области вставлять а не изх буфера.
Может получиться range.Selection и вставить его в другой документ этим методом?
...
Рейтинг: 0 / 0
07.12.2011, 17:08
    #37563527
jeep81
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM, ms word
jeep81,

В общем ищу метод который бы вставлял из буфера обмена с сохранением форматирования. Причем и для таблицы тоже. Поведение очень странное. Вставленное оказывается со всем личными стилями которые я добавил в шаблон, но в самих стилях в свойствах форматирование становится по умолчанию. Те оно не копируется.
...
Рейтинг: 0 / 0
08.12.2011, 11:12
    #37564625
jeep81
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM, ms word
jeep81,

В общем, может кому пригодиться, поэтому напишу.
В печати Ком предложения было следующее.
В двоичных данных был док вордовский. Он загружался, сохранялся на диске клиента и открывался. Программно открвался пустой документ. Ну дальше как положено поиск тэгов, замена. Только вот при вставке из буфера стили копируются без фонтов, не полностью. Почему не знаю, там нужно дальше ворд ковырять. Нашел вот такой метод
Document.CopyStylesFromTemplate Method MSDN CopyStylesFromTemplate

теперь после вставки сохраняются стили и соответственно нормально все печатается.
...
Рейтинг: 0 / 0
Форумы / [игнор отключен] [закрыт для гостей] / COM, ms word / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]