Сегодня мы можем вернуться к разбору вопросов, связанных с созданием электронных форм в Word.
Сегодняшний вопрос задал Firas Hamza:
А можно сделать так чтобы цифры введенные в одном поле, прописывались текстом еще в одном месте? Т.е. я цифрами вбил 3600 руб., и ниже нужно чтобы написалось “Три тысячи шестьсот” руб. и тд.
Конкретно использовавшиеся нами раньше Content Controls таким функционалом не обладают, но есть другой – старый и отчасти забытый механизм полей и формул в Word, которым мы и воспользуемся.
Итак, пусть у нас есть простой фрагмент документа:
В строке Number мы будем вводить число (для этого мы добавили туда простое поле ввода), а в строке Words будем получать его словесное представление. Итак, что нужно сделать:
- Создаем bookmark (закладку), которая будет “накрывать” наше поле ввода (эта загладка нужна нам чтобы в формуле ссылаться на вводимое число).
Для этого выделяем наше поле ввода (не текст в поле, а само поле – можно с небольшим запасом, не старшно) и на вкладке Insert нажимаем Bookmark
вводим имя закладки (например, Summ) и нажимаем Add
- В строке Words добавляем поле-ссылку на закладку, у которого поставим специальный формат вывода cardtext.
Для этого встаем в строку Words и нажимаем Ctrl+F9
внутри фигурных скобок пишем:
REF Summ \*cardtext
- Щелкаем на введенную нами формулу и в контекстном меню нажимаем Update Field
- Выделяем только что вставленное поле (опять можно с некоторым запасом – по пробелу с каждой стороны), нажимаем в строке (внизу окна программы) статуса выбор языка
и в окне языка выбираем русский язык:
Собственно всё готово. Если теперь мы в нашем поле ввода введем число, а затем выделим весь текст документа (Ctrl+A) и нажмем F9, то получим примерно такой результат (это вызывает обновление/пересчет всех полей в документе):
Ура!!!
Теперь об ограничениях этого подхода:
- он работает только с числами до 999999 (т.е. меньше миллиона)
- не очень надежен по части языка (у меня он всё время переключается и начинает писать по английски – даже несмотря на явное задание языка для ввода и вывода). Скорее всего будут проблемы с разными национальными версиями офиса.
- требует нажимать “Обновить поля” (это мы делали: Ctrl+A и F9) или переоткрывать документ
- не умеет склонять слова (теже “рубля”/“рубль”).
P.S. По этой ссылке можно скачать документ с примером и поиграться
В понедельник попробую 🙂 Спасибо Спасибо!
Появилась свободная минутка, и попробовал. Все работает, ура)))
А теперь что касается второй части вопроса, можно научить его вычитать разницу между двумя датами и результат умножать на вот это “Summ” и тоже выводить в отдельном поле? 🙂
Кст, Михаил, как мне тебя отблагодарить? Если бываешь в районе Новокузнецкой, заходи на кофе 🙂
Отлично, только помни про ограничения.
Увы, разве что раз в два года: Ижевск всё же в 1200 км. 🙂
Ну так приезжай чаще 🙂 У меня мини-отель в центре.
Ограничение не пугает, там цифры все меньше чем 100к.
Договорились 🙂
Прошу прощения, увидел сообщение про даты 🙂 Ну ладно, руками тогда буду дни считать 🙂
Я бы всё же подумал по поводу добавить немного кода на VBA.
Если этот документ чисто для внутреннего использования и необходимость написать небольшой макрос не пугает, я могу сделать такой пример.
Да честно говоря тут уже не так все критично))) Т.е. сумму то я обычно знаю, просто думал съэкономить еще одну секунду, но таких документов делать приходится всего 2-3 раза в день, поэтому не страшно 🙂