Со времени написания последней статьи про формы в Word 2013, у меня накопилось несколько вопросов (с решениями) которые появлялись у меня или моих коллег, в процессе работы с формами. Несмотря на небольшой срок вопросов уже набралось больше чем на одну статью (и, я надеюсь, их еще только добавится), поэтому я решил сразу же оформить их как серию.
Вопрос 1. Как установить форматирование в ячейках таблиц в формах.
Например, мы хотим, чтобы данные в одной из колонок были выровнены вправо. Пусть, это будет колонка с контрольной датой из предыдущей статьи (хотя чаще такое требуется для числовых, денежных, и .т.д полей – но у нас таких просто нет в наличии )
Казалось, бы что сложного: выделить ячейку и нажать кнопку выравнивания…
Увы! Стоит вам подставить в этот шаблон реальные данные… да, что данные – просто переоткрыть шаблон – как все форматирование вновь собьется и придет к исходному.
У меня есть подозрение, что виной всему механизм привязки данных – если ваши поля привязаны к XML, текст документа каждый раз при открытии перестраивается заново. Если у вас чистый шаблон – по пустой XML. Поэтому, есть подозрение, что если создавать шаблон без привязки к XML (просто вставлять content controls) форматирование теряться не будет. Но я это предположение я даже не проверял – формы без привязки мне практически не нужны.
Что же делать, неужели все так плохо? К счастью, выход нашелся, причем вполне приличный. Итак по шагам:
Шаг 1. Создаем новый стиль для форматирования ячеек с датой
Для этого:
- Открываем шаблон
- Выделяем ячейку с датой (обратите внимание – именно ячейку! это можно понять по виду курсора)
- Открываем панель стилей и выбираем создание нового стиля (пункт Create a Style)
Шаг 2. Задаем параметры нового стиля
А вот и получившийся результат:
Кстати, теперь в любой момент можно открыть созданный нами стиль (он виден в списке стилей) и изменить, например, параметры текста (скажем, сделать его полужирным и красным).
Вопрос 2. Как сделать так, чтобы внутри Repeating Section нельзя было изменять текст нигде, кроме полей ввода.
Чуть подробнее суть проблемы в следующем, когда вы создали Repeating Section (для того, чтобы размножать строки таблицы или целые разделы документа), вся область внутри этой Repeating Section считается полем формы. А это значит, что когда вы делаете защиту документа и разрешаете только ввод в поля формы, вы разрешаете вводить данные где угодно внутри Repeating Section!!!
Т.е. несмотря на защиту можно будет промахнуться и сделать вот так:
– значит текст не сопоставится ни с каким XML-тэгом и извлечь его просто так не получится.
Способ борьбы я упомянул вскользь еще в прошлой статье, но это “вскользь” сделало его почти незаметным, поэтому повторю еще раз:
- Открываем параметры Repeating Section. У нас это сделать не сложно, т.к. все секции у нас именованные. Достаточно щелкнуть на “шильдик” Решения и на панели Developer выбрать пункт Properties
- В окне свойств ставим галочку “Contents cannot be edited” (или “Содержимое нельзя редактировать” в русской локализации)
- Закрываем окно, включаем защиту всего документа, наслаждаемся полученным результатом
Ну и файлы для изучения и экспериментов:
Благодарю за столь подробный разбор !
Рад, что мои статьи кому-то пригождаются.
Спасибо за отзыв!
Спасибо за статью! Есть такой вопрос, не могу найти решение. Можно ли заменить текст-подсказку в “подложке” формы? Мне нужно создать форму для англоязычных партнеров, а Word русский. Т.е. мне нужно, чтобы высвечивалось не “Место для ввода текста”, а, допустим, “Insert your text here”.
Очень рад, что мой скромный труд вам пришелся по душе.
Что касается вашего вопроса, то рекомендуют делать как описано в статье Modify Content Control Placeholder Text
Если кратко, то там предлагается следующая схема:
– добавляем нужные контролы на форму
– переключаемся в режим конструктора
– встаем внутрь(!) текста “подложки” (чтобы не сломать стиль форматирования)
– набираем нужный текст
– удаляем старый текст по краям
– выключаем режим конструктора
Если текстом получилось не очень понятно – взгляните на этот ролик