Вставка поля с формулой не работает во Writer

Автор Lant, 1 июля 2015, 00:38

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

Lant

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

Пакет LibreOffice 4.4.3 (последний сейчас)

Имеется несколькостраничный документ, бланк, набранный во Writer. Пи этом на первой странице набран текст договора, с использованием полей, где указываются данные, например

----------------------
"ДОГОВОР

Абонент <поле "ЗадатьПеременнную" АбонентФамилия> <поле "ЗадатьПеременную" АбонентИмя> <поле "ЗадатьПеременную" АбонентОтчество>"

ну далее всякие там общие для бланка вещи, текстовка, в конце опять эти же поля, только они не задаются, они выводятся через
<поле "ПоказатьПеременную" АбонентИмя> и так далее.
--------------------------------------------------------------------
То есть мы в начале документа задали в полях "задать переменную" - фамилию, имя, отчество, и они потом уже в полях "показать переменную" отображаются. Вроде бы всё работает, но нужно не совсем это.

После договора, на последней страничке, находится так называемая "карточка абонента". По своей сути это такая таблица для печати с квадратиками (сделал таблицу с кучей колонок и строчек), квадратики сделал обрамлением нужных колоночек, и теперь в каждом квадратике нужно вписывать по одной букве от фамилии, имени, отчества. По одному символу в ячейке. Тех самых, которые мы задавали в самом начале.

Теперь нам нужно вычислить первый символ из переменной "АбонентФамилия" (или другой) и вставить его в первую ячейку таблицы, затем надо вычислить второй символ из этой же переменной и поместить его в третью ячейку (второй столбец пустой, он разделитель), третий символ в пятую колонку, четвёртый в 7ю и так далее (всего 18 символов). Таким вот образом мы разбиваем введённые в полях переменные "АбонентФамилия" на отдельные символы и вставляем символы поодиночке в нужные нам ячейки. Всё вроде бы прекрасно - но оно не работает!

Из подсказки LibreOffice нахожу функцию MID(Строка;Start;Len) - которая должна выводить подстроку переменной. В подсказке даже приводится пример работы данной функции: при задании MID("office";2,2) должно выводиться два символа "ff". Как раз то, что нужно! Однако оно не работает! Выводится "2". Как проверить. Выбираем "Вставка - Поля - Ещё поля" - открывается диалог "Поля". Нас интересуют раздел "Переменные", переходим туда. Видим наши ранее введённые переменные "АбонентФамилия" и тп. Выбираем тип - "Вставить формулу", и в поле ввода указываем MID и далее по тексту. НЕ работает! Вычисляет, например, sin (2), может складывать, вычитать, и тп числа и имеющиеся переменные. Но как только доходит дело до функций - всё, финиш. Даже функция LEN("office") не работает и выдаёт 0 вместо 6.

Может я делаю как-то не так? Конечно, можно извратиться, и создать кучу полей ввода для односимвольного ввода фамилии-имени-отчества, но это будет просто ужос как коряво. К тому же в договоре ФИО пишется с большой буквы, затем маленькие, а в карточке надо указывать большими буквами, есть функция смены регистра, но и она тоже не работает во Writer! Это что за наваждение такое, блин...

kompilainenn

эм..вы функцию нашли для Calc, а пытаетесь засунуть ее в Writer. Сам по себе Writer умеет крайне ограниченное количество функций. Если ваша задача и имеет решение, то имхо нужно городить макрос, который внутри себя может применять функции Calc.
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

Lant

Сегодня вышел LibreOffice 4.4.4, обновил, проверил, тоже не работают функции. Похоже из работающего есть только математические операции, а из функций - только синус/косинус/тангенс. Даже округление не работает и абсолютное значение. Текстовые тоже не работают - ни одна! Лежит на сайте пре-релиз LibreOffice 5.0.0.2, там тоже набор функций так сильно ограничен?

Макросы городить не хочется, хотя может это предубеждение? Попробовал ввести "Вставка - Сценарий", там предлагается ввести скрипт JavaScript. В принципе с помощью JavaScript, наверное, можно было бы организовать простейший разбор переменных, например, чтобы из одной переменной АбонентФамилия создавалось 18 переменных АбонентФамилия1, АбонентФамилия2, АбонентФамилия3 ... АбонентФамилия18 (допустимое число символов в карточке). В карточке на последней странице соответственно устанавливаются поля "Вывести переменную АбонентФамилия1" "Вывести переменную АбонентФамилия2" и так далее.

Хорошо, пробую со скриптом. Делаю "Вставка - Сценарий", выбираю JavaScript, и во всплывающем окошке где предлагается ввести скрипт, пишу роды программиста:

alert("test");

но оно не работает. Тогда пробую сделать обрамление:
<script language="JavaScript">
alert("test");
</script>

и всё равно нет всплывающего окна. А если скрипт не работает (проверяется по этим родам), то и переменные не обработаются. Опять что-то не так? Как же решить данную проблему?

kompilainenn

Цитата: Lant от  1 июля 2015, 06:23Лежит на сайте пре-релиз LibreOffice 5.0.0.2, там тоже набор функций так сильно ограничен?
ну просто Writer - это внезапно текстовый редактор с возможностью оформления текста, поддержка хоть каких-то математических функций в нем - это просто дополнительная приятность. Ничего нового (типа объединения функций Writer и Calc) не планируется.

Подождите, щас проснутся товарищи, которые умет макросы делать достаточно сложные, и помогут вам
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

rami

Для начала выложите образец документа, чтобы не ломать голову над словесным описанием.

Lant

#5
В документах персональные данные абонентов! Нельзя распространять!

Поэтому я сделал копию, задал все персональные данные от балды на Иванова Ивана Иваныча и Сидорова Андрея Петровича из Урюпинска.

Примечания по переменным, исользующимся в документе. В карточку, расположенную в конце, необходимо вносить данные нового абонента. Они не разделены по фамилии-имени-отчеству, поскольку в договоре указываются последовательно-неразделимо, а в карточке мне не удалось создать, чтобы разделять посимвольно строки, поэтому там одна переменная "НовоеФио" вместо трёх "НовоеФамилия", "НовоеИмя", "НовоеОтчество". Всё что удалось добиться вставления в карточку - это паспортные данные абонента, которые по форме не разделены на символы. Даже если бы удалось как-то разделить номер карточки по символам и вставить их по одному символу в ячейки - уже было бы прогресс. Если удастся добиться разделения строк на символы, то потом и адрес и телефон можно будет также разделить.

p.s. ЦЕЛЬ: научиться разбивать хотя бы числовые данные на символы. Тогда можно будет разбить номер абонентской карточки (переменная ДоговорКарта) на символы, отделить индекс от адреса абонента, индекс разбить на символы. Хотя бы это!

p.p.s. Облегчу понимание задачи. Кто-то может попрактиковаться с вложенным документом. Попробуем пойти путём сокращения и убирания ненужного. Уберём всё лишнее. Итак, есть документ Writer. Простейший бланк:
--------------------
Фамилия пользователя: ___ <Поле: ЗадатьПеременную: ЮзерФамилия (текстовый)>
Имя пользователя: _______ <Поле: ЗадатьПеременную: ЮзерИмя (текстовый)>

ТАБЛИЦА (10 колонок, 2 строки)

1
2
3
4
5
6
7
8
9
10
Фамилия:1симв2симв3симв4симв5симв6симв7симв8симв9симв
Имя:1симв2симв3симв4симв5симв6симв7симв8симв9симв
----------------------------------

Требуется ЗАПОЛНИТЬ таблицу одиночными символами фамилии и имени пользователя. Как угодно!
Желательно без скриптов, если получится - хорошо, если нет, надо скрипт городить...
Какой?  ???

rami

Я долго ходил по Офисным полям поросшим бурьяном... :(

...Но лучше не выходить за рамки(врезки)... ;D

Вот что получилось: (подсказка: выделите курсором имя или фамилию и измените их, после изменения отодвиньте курсор от изменённого слова)