Создание типового документа Writer на основе таблицы Calc

Автор ost, 12 сентября 2016, 13:48

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

ost

Доброго.
Подскажите, пожалуйста, как проще решить задачу формирования типовых текстовых документов Writer (.odt) на основе данных таблицы Calc (.ods)?

Я подготовил шаблон .ott, в который напихал через "Файл-->Свойства-->вкладка Свойства пользователя-->кнопка Добавить" в нужных местах пользовательских полей в расчете изменять макросом их значения. Сами значения макрос вытаскивает из таблицы Calc . Великолепно, подумал я и сделал что-то типа:

oDoc=StarDesktop.LoadComponentFromUrl(sTemplateURL, "_blank", 0, aArray()) 'делаем .odt на основе шаблона
vDocInf=oDoc.getDocumentInfo()
For i=0 to vDocInf().getUserFieldCount()
vDocInf.setUserFieldValue(i, aArray(i)) 'изменяем значение очередного поля
Next i


Великолепия, однако, не случилось. Заметил, что vDocInf().getUserFieldCount() равно 4, а не N, где N- количество засунутых мной в шаблон .ott полей.
Инспектор (который в редакторе макросов по F7) показал, что полей больше, чем 5, но меньше чем N.

Как добраться до полей и изменить их значения?

OOo 4.1.2



kompilainenn

а может описать весь процесс и видение итога по-русски, может есть иной путь, чем Ваш?
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

ost

Есть таблица в Calc, количество строк которой изменяется. Количество граф-нет. Каждая такая строка-запись содержит данные об одном контрагенте. Задача сформировать уведомление выбранному контрагенту, содержащее неизменяемый (общий для всех контрагентов) текст, перемежающийся изменяющимися (индивидуальными для каждого контрагента) данными.

Как видится решение.
Контрагент-получатель уведомления выбирается щелчком любой ячейки в строке контрагента. Затем запускается макрос, который и формирует odt-документ с текстом уведомления. Уведомление при этом содержит неизменный для всех контрагентов текст (обращение, вводная часть и тп.) и индивидуальные для каждого из них данные  (ИНН, сумма долга, период просрочки и пр.)

Задачу попытался решить так же, как она была решена в свое время в среде VBA:
То есть сделал шаблон текстового документа со вставленными полями вместо изменяемых данных. Затем попытался после создания документа на основе такого шаблона программно изменить содержание полей. Не вышло.

JohnSUN

#3
Глянь две ссылки из вот этого сообщения (гм, вторая ссылка должна была привести на https://www.youtube.com/watch?v=3GHuVAk6b20 )
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

ost

Спасибо. Посмотрю как доберусь к домашнему компу.

ost

Цитата: JohnSUN от 12 сентября 2016, 13:13Глянь две ссылки
Посмотрел. Полезно, но.

1. Сложно для непродвинутых пользователей.
2. Делать рассылку для всех контрагентов из списка не нужно.

Интересно, а пользовательских полей в документе .odt может быть всего 4?

ost


economist

Рассылка - это всего лишь бонус при использовании механизма Полей из Базы данных ODT, привязанной к ODS.

На самом деле вы просто жмете F4, находите нужную строку в Таблице вверху (поддерживаеются Поиск, Фильтры итп), и жмете кнопку Данные в поля. Всё, документ по одной строке из таблицы - заполнен.

Вот этой штукой я был окрылен нипадецки и перевел на этот документооборот треть всего регулярного (служебки, заявки, и даже объяснительные. Например, каждому опоздавшему после обеда приходит автоматическое письмо от системы контроля доступа), по сути ODT-файл со всем заполненным "существом нарушения" и элементами HR-аналитики - во сколько отбился, сколько суммарно минут опозданий с начала месяца и за 3 прошедших, есть. Остается только выбрать из списка "Проспал", "Попал в пробку", "Поздно вышел из дома", распечатать и подписать :-))
Кол-во "типовых" объяснительных и заявлений на коллектив в 1,3 тыс. человек - за год около 20 тыс., на написание которых уходило 40 тыс. чел-часов (по сути целая неделя тратится 1 человеком на писанину). ODT с полями сократил это время в 10 раз.   

Имхо, разбирательство с иерархией "своих" полей во Writer - гиблое дело. Одна Enumeration чего стоит.
Даже Питоньяк развел руками в части полей-списков, кое-что из его кода вовсе не работает.
Жестко, но вместо головоломки: https://wiki.openoffice.org/wiki/Documentation/DevGuide/Text/Text_Fields
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...