Как внести в шаблон документа новый постоянный реквизит и еще по мелочи?

Автор Dr_Lecter, 21 октября 2015, 10:07

0 Пользователи и 1 гость просматривают эту тему.

Dr_Lecter

Есть макрос, сохраняющий документы по папкам с автоматическим присвоением имени.
Он же импортирует в шаблон данные из внешнего файла.
Одни и те же данные, получаемые макросом могут использоваться в нескольких шаблонах документов, но именоваться файлы документов должны по разному, в зависимости от шаблона.

Как внести в шаблон данные, которые будет получать макрос и дописывать в название файла?

Т.е. если мы запускаем макрос из "Шаблон Типа 1" то файл должен иметь окончание "Тип1", а если из "Шаблон Типа Два" то окончание будет "ТипДва".

Я так понимаю можно использовать "Имя файла" - но тогда придется все шаблоны сокращениями обзывать.
Или делать через цикл - IF "Имя файла" = ""  Then "пиши нужное сокращение в конец файла"

И еще второй схожий момент - в определенный участок каждого документа я пишу e-mail клиента, в перспективе хочу доделать макрос который будет генерировать письмо с отчетом и автоматически отправлять его на этот адрес - как заранее лучше обозначить местонахождение E-Mail в теле документа чтобы потом к нему легко было обращаться?

Вставляю я E-mail через Bookmark.Anchor.String - смогу потом его оттуда выдернуть в новый макрос?

Кто уже сталкивался с автоматизацией генерации и отправки писем - насколько правильно смотреть в сторону Mozilla Thunderbird или посоветуете что-то другое?

Заранее спасибо!

rami

Цитата: Dr_Lecter от 21 октября 2015, 08:07Или делать через цикл - IF "Имя файла" = ""  Then "пиши нужное сокращение в конец файла"
Так будет лучше.
Цитата: Dr_Lecter от 21 октября 2015, 08:07И еще второй схожий момент - в определенный участок каждого документа я пишу e-mail клиента, в перспективе хочу доделать макрос который будет генерировать письмо с отчетом и автоматически отправлять его на этот адрес - как заранее лучше обозначить местонахождение E-Mail в теле документа чтобы потом к нему легко было обращаться?
Самое простое в закладку — и вставка и извлечение.
Цитата: Dr_Lecter от 21 октября 2015, 08:07Вставляю я E-mail через Bookmark.Anchor.String - смогу потом его оттуда выдернуть в новый макрос?
Нет, только не это, лучше закатать в асфальт...    

Dr_Lecter

Цитата: rami от 21 октября 2015, 10:26Самое простое в закладку — и вставка и извлечение.

Это как?

Цитата: rami от 21 октября 2015, 10:26Нет, только не это, лучше закатать в асфальт...

Так вы же сами рекомендовали именно так и делать:
ЦитироватьВсе закладки находятся в одном месте — oBookmark = oDoc.Bookmarks, выдёргиваете одну по имени и смотрите на якорь, он имеет свойство String. Курсор тут не нужен.

rami

Цитата: Dr_Lecter от 21 октября 2015, 09:27Так вы же сами рекомендовали именно так и делать
Закладки — это самый быстрый и простой способ добраться (а так же скопировать или изменить) до нужного текстового объекта, но закладки на дереве не растут, их нужно создавать (и делать это правильно). Закладки бывают двух видов:

1. "точечная" — начало и конец текста одинаковы, вставить текст можно, но не в саму закладку, а справа от неё. Свойство String закладки всегда пустое (текст вставляется не в закладку, а "мимо"). В этом случае получить текст напрямую через закладку нельзя, закладка служит отправной точкой для дальнейших телодвижений.

2. "диапазонная" — начало и конец текста разные, и между ними есть хотя бы один символ. Свойство String закладки всегда содержит что-нибудь (текст вставляется в саму закладку и заменяет существующий). Этот вид более предпочтительный в вашем случае. Создать такую закладку просто: выделяем один или несколько символов (можно пробел) и вставляем закладку.

Про "закатать в асфальт" если не получится в закладку я пошутил  (надеюсь вокруг вашей клиники за последний час асфальта не прибавилось ;D )

Dr_Lecter

У Питоньяка в главе 13 есть
ЦитироватьТаблица 146. Интерфейсы текстовых полей, начинающиеся с com.sun.star.text.TextField.
, там куча полей в которые можно внести нужное мне название шаблона и использовать его для генерации имени файла.

Но я не могу обратится ни к полю docinfo.Description ни к docinfo.Title, не находит методом getByName(), замена getTextFields() на getTextFieldMasters() тоже не помогает.
Как к ним обращаться-то?

Sub Main

oDoc = ThisComponent
oText = oDoc.Text
oField = ThisComponent.getTextFields()
oDocInfoField = oField.getByName("com.sun.star.text.TextField.docinfo.Description")
msgbox oField.Content


End Sub



Я пока сделал через ThisComponent.DocumentProperties, но там полей куда как меньше.

rami

Цитата: Dr_Lecter от 22 октября 2015, 05:22Но я не могу обратится ни к полю docinfo.Description ни к docinfo.Title, не находит методом getByName(), замена getTextFields() на getTextFieldMasters() тоже не помогает.
Как к ним обращаться-то?
Там ниже под таблицей Таблица 146. есть Листинг 288. — он показывает все поля в документе (но не те, которые вы хотите, а те, что вы реально создали).

Кстати, поле docinfo.Description — это "Примечания", а поле docinfo.Title — "Заголовок" в свойствах документа (меню Файл —> Свойства...)