Заполнение шаблона word qt

Обновлено: 04.07.2024

Это продолжение работы, которую мы проделали в моей предыдущей статье — Заполнение документов Word данными из внешних источников. Разница в том, что мы будем использовать готовый шаблон для вставки данных. Вместо того, чтобы вставлять данные «волей-неволей», нам нужно найти, где их вставить в предопределенной структуре документа.

Создание шаблона Word

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

Для этого примера вам необходимо сделать следующее:

  1. Откройте Microsoft Word.
  2. Создайте пустой документ.
  3. Выполните команду «Сохранить как» и сохраните файл как файл .dotx. Вы можете сохранить в место по вашему выбору. Запишите его расположение, потому что оно понадобится вам при тестировании кода. Назовите файл DataTemplate.dotx, потому что я так назвал свой.
  4. Оформите первую страницу в соответствии с изображением ниже:
  5. Вставьте разрыв страницы, чтобы добавить еще одну страницу в документ Word.
  6. Оформите страницу в соответствии с изображением ниже:
  7. Не забудьте вставить закладки, как указано. Вы можете найти команду закладки на вкладке «Вставка» Word. После добавления обеих закладок диалоговое окно закладок будет выглядеть следующим образом:
  8. Сохраните документ.
  9. Теперь у нас есть шаблон документа с двумя страницами. Оба имеют две таблицы, но таблицы второй страницы находятся в закладках Word. Мы готовы написать код.

    Напишите код

    Сегодняшний код сосредоточен на том, как найти таблицы в документе. Таблицы действуют как заполнители для данных, которые мы хотим вставить.

    Функция findTable

    Во-первых, нам нужна функция, которая находит нужную таблицу. Word не позволяет пользователям давать имена таблицам. Мы можем сделать это в коде с помощью свойства ID, но это бесполезно для создания пользователем шаблонов.

    Поэтому конструктор шаблонов создает таблицы и вставляет для них имя в первую ячейку. Затем мы можем перебрать все таблицы в документе и найти нашу таблицу. Это то, что делает функция findTable.

    Функция принимает документ Word и строку в качестве параметров. Затем он просматривает таблицы документа и находит таблицу, содержащую строку поиска. Я решил использовать contains вместо ==, так как это более снисходительно.

    Функция getTableByBookmarkName

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

    Для наших целей я предполагаю, что закладка содержит только таблицу или, если существует несколько таблиц, что нам нужна первая таблица. Эту логику достаточно легко изменить, если бизнес-требования диктуют иное.

    Необходимые изменения кода в предыдущей статье

    Чтобы включить указанные выше функции в наши методы вставки данных, нам нужно внести пару изменений. Для целей этой статьи я сосредоточусь на импорте из Access и Outlook. Да, предыдущая статья также импортирована из SharePoint, но я думаю, что нам нужны только образцы, чтобы донести суть.

    Импорт данных из Access

    Метод ImportFromAccess теперь имеет параметр demoType. Это строка, которая позволяет нам указать, какой метод мы хотим использовать для поиска таблицы. Мы хотим использовать стратегию закладок или стратегию зацикливания таблицы? Вот почему существует demoType.

    Мы проверяем значение demoType и разделяем его соответствующим образом. Если значение равно «table», мы вызываем findTable и просматриваем таблицы документа. В противном случае мы используем метод закладки, вызывая getTableByBookmarkName.

    С таблицей мы запрашиваем доступ и вставляем результаты запроса в таблицу.

    Импорт из Outlook

    InsertFromOutlook работает так же, как InserFromAccess. Мы используем параметр demoType, чтобы указать, как получить таблицу. После получения таблицы мы открываем Outlook и вставляем контактные данные в таблицу.

    Ключевое отличие этого метода заключается в том, что мы добавляем в таблицу два столбца и устанавливаем значения для строки заголовка.

    Для производственного кода параметр demoType не имеет смысла. Однако выделение этих двух стратегий, безусловно, работает.

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

    Доступные загрузки:

    В этой статье предлагаются расширенные методы Microsoft Word (2010–2013) для создания защищенного шаблона с заполняемыми полями (или «элементами управления содержимым» в терминологии Microsoft) для данных, которые не могут быть дополнены тегами полей слияния Clio.Эти методы могут быть полезны для создания защищенных трастовых квитанций с помощью Document Automation.

    Если вы не знакомы с Document Automation, см. следующие статьи поддержки:

    Содержание

    Отображение вкладки "Разработчик"

    Инструменты, необходимые для добавления элементов управления формой в шаблон, можно найти на вкладке "Разработчик", которая по умолчанию скрыта.

    Чтобы отобразить вкладку "Разработчик", нажмите "Файл".

    File.jpg

    Затем нажмите "Параметры".

    Options.jpg

    В окне параметров Word

    1. Нажмите "Настроить ленту" на левой боковой панели.
    2. В области "Вкладки" справа установите флажок "Разработчик".
    3. Нажмите "ОК".

    Customize_Ribbon.jpg

    Добавление элементов управления формы

    На вкладке "Разработчик" 1 в группе "Элементы управления" 2 находится ряд доступных полей управления формой.

    Developer_Tab.jpg

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

    Control_Added.jpg

    Чтобы изменить текст заполнителя по умолчанию в элементе управления ("Нажмите здесь, чтобы ввести текст" в приведенном выше примере), нажмите "Режим дизайна".
    Чтобы изменить свойства элемента управления, нажмите "Свойства".

    Design_Mode.jpg

    Каждый элемент управления имеет параметры, доступ к которым можно получить, нажав «Свойства» с выбранным элементом управления, который вы хотите изменить.

    Например, именно так вы добавите параметры в элемент управления "Выпадающий список" или укажете формат даты, отображаемый при использовании элемента управления "Выбор даты".

    В примере слева показаны основные параметры свойства, доступные для формирования элементов управления содержимым.

    • Добавление имени в поле "Название" будет отображать это имя при выборе элемента управления.
    • Раскрывающийся список "Показать как" позволяет изменить основной внешний вид ограничивающей рамки или тегов элемента управления.

    Параметры "Блокировка" полезны только в том случае, если элементы управления шаблона уже содержат контент, который вы не хотите изменять или удалять. Не устанавливайте эти параметры, если вы предполагаете, что содержимое может потребоваться добавить или изменить в элементе управления содержимым.

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

    Чтобы добавить новый параметр в раскрывающийся список, нажмите кнопку "Добавить". Чтобы отредактировать существующую опцию, нажмите на нее, а затем нажмите кнопку «Изменить». Чтобы удалить параметр, нажмите на него, а затем нажмите "Удалить".

    Свойства элемента управления выбора даты позволяют выбрать формат даты, которая отображается, когда пользователь выбирает день в мини-календаре.

    Нажмите на формат даты в области выбора, чтобы выбрать его, затем нажмите OK.

    Форматирование элементов управления формы

    По умолчанию текст, который вводится в элемент управления, будет иметь то же форматирование, что и строка, в которую он был добавлен. Чтобы изменить форматирование текста, вводимого в элемент управления, выделите элемент управления с выключенным режимом «Дизайн» и внесите изменения в форматирование, как и в любой другой текст.

    Чтобы изменить формулировку или форматирование текста-заполнителя элемента управления:

    1. Включите "Режим конструктора".
    2. Выделите текст-заполнитель и внесите необходимые изменения в форматирование.
    3. Отключите "Режим дизайна".
    Управление форматированным текстовым содержимым — конечный пользователь сможет форматировать текст, введенный в эту текстовую область.
    Элемент управления содержимым простого текста — конечный пользователь НЕ сможет форматировать текст, введенный в эту текстовую область.
    Комбо/выпадающий элемент управления выбором — параметры можно добавить к этому элементу управления, чтобы пользователи могли выбирать из него.
    Выбор даты — вызывает мини-календарь для выбора даты.
    Элемент управления формой с текстом-заполнителем по умолчанию и без форматирования — режим конструктора включен
    Control_No_Format.jpg
    Управление формой, отформатированное с пользовательским текстом-заполнителем — режим конструктора включен
    control_formatted.jpg
    Элемент управления формы, отформатированный с помощью пользовательского текста-заполнителя — Дизайн Режим выключен
    control_formatted2.jpg

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

    Добавление ограничений на редактирование/защиты к вашему шаблону

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

    Чтобы ограничить редактирование вашего шаблона:

    1. Перейдите на вкладку "Разработчик".
    2. Нажмите "Ограничить редактирование".
    3. На боковой панели «Ограничить редактирование» справа установите флажок под пунктом «2. Ограничения редактирования» и измените раскрывающийся список на «Заполнение форм».
    4. Нажмите «Да, начать принудительное применение защиты» на шаге «3. Начать принудительное применение».

    Restrict_Editing.jpg

    start_enforcing.jpg

    После загрузки в Clio защищенный шаблон будет создавать новые защищенные документы Word, в то же время извлекая информацию из Clio.

    Меньше чем за час мы продемонстрируем передовые методы MS Word для добавления условных полей и элементов управления формы в ваш шаблон Word. Мы также покажем, как добавить ограничения на редактирование вашего шаблона. Этот расширенный веб-семинар предназначен для пользователей, которые уже умеют создавать шаблоны Word для использования в автоматизации документов.

    Нажмите ЗДЕСЬ, чтобы просмотреть запись.

    Спасибо за отзыв.

    Мы будем использовать эту информацию для постоянного улучшения наших ресурсов самопомощи.

    Я действительно новичок в QT, и мне было поручено программно обновить некоторые значения полей в документе Word, в настоящее время я могу нормально заменить текст из документа Word, но когда это значение поля находится внутри объекта (таблицы или чего-либо еще), это не так. работает, мой код:

    Если вы можете помочь, было бы здорово :)


    Я бы предложил убрать слово "поля" из вашего заголовка, потому что вы заменяете конкретный текст, а не поле Word. Так вы привлечете больше внимания. Если вы можете изменить характер целевых файлов, вам следует заменить свои цели реальными полями Word DocVariable или DocProperty. Затем используйте свой код, чтобы изменить переменную или свойства и обновить соответствующие поля в документах. Некоторые свойства документа (в меню «Экспресс-блоки» > «Свойства документа») сопоставляются с точками данных XML и не требуют обновления полей, если они используются.

    на самом деле мы создаем поля: Вставка -> Быстрые части -> Поле, затем выбираем тип поля, может быть, это неправильно, но я не знаю, как сделать другие шаблоны, потому что документ Word должен содержать какой-то заполнитель, где Я могу программно добавить некоторые значения

    1 Ответ 1

    Если вы можете изменить характер целевых файлов, вам следует заменить их реальными полями Word DocVariable или DocProperty. Затем используйте свой код, чтобы изменить переменную или свойства и обновить соответствующие поля в документах. Некоторые свойства документа (в меню «Экспресс-блоки» > «Свойства документа») сопоставляются с точками данных XML и не требуют обновления полей, если они используются.

    Заполнитель может быть (1) полем DocVariable или (2) полем DocProperty. Вы можете изменить переменные или свойства с помощью кода, а затем обновить поле.

    Вы также можете использовать один из встроенных сопоставленных элементов управления содержимым свойства документа, и в этом случае нет необходимости обновлять поле при изменении свойства. Это автоматически. Подробнее об этом читайте на моей связанной странице: Повторяющиеся элементы управления содержимым документа с сопоставленными данными или другие элементы управления сопоставляемым содержимым.

    Вот ссылки на две страницы Word MVP по доступу к свойствам документа с помощью vba.

    Приходилось ли вам использовать такой шаблон?


    Если вы имеете в виду просто использование таблиц, да, я сделал шаблоны с закладками в таблице. Метод поиска работает так же. На самом деле, хотя я и не пробовал делать закладки в заголовке, он также может найти элементы в заголовке — например, при поиске по ключевому слову.



    На самом деле таблицу в Word можно заполнить с помощью закладок.
    Требуется, чтобы закладки определялись как "закладка столбца таблицы".
    Такая закладка, определенная в ячейке таблицы, натягивается на исходную ячейку, а затем на ячейки, добавленные ниже.
    Это означает, что мы можем писать во все ячейки столбца, включая ячейки, добавленные кодом.

    На практике:
    1. В документе Word создайте таблицу с двумя строками. Первая строка предназначена для заголовков.
    2. Во второй строке напишите соответствующий текст в каждой ячейке (ссылаясь на закладку).
    3. Выберите ячейку во второй строке (должна быть выделена вся ячейка — это важно).
    4. Перейдите к диалоговому окну закладок и определите закладку.
    5. Повторите шаги 3 и 4 для всех ячеек во второй строке.

    Для выполнения теста создайте шаблон Word, как описано в сводке.
    Скопируйте два приведенных ниже метода в свой собственный класс и вызовите TestColumnBookmark.
    Помните "использование Microsoft.Office.Interop.Word"

    В методе InsertIntoTable вы увидите использование логического свойства "Столбец" из
    класса Bookmark в Office Automation. Это верно для закладок, определенных выше.


    ///
    /// Протестируйте использование закладок столбца таблицы в Word.
    /// Входной документ должен иметь таблицу из трех столбцов и двух строк.
    /// Первая строка содержит заголовки.
    /// Вторая строка содержит закладки столбцов таблицы с именами "FirstCol", "SecondCol" и "ThirdCol".
    ///
    ///

    Полный путь к входному документу

    Полный путь к выходному документу


    private void TestColumnBookmark(string fname, string newfname)
    _Document doc;

    попробуйте
    _Application WDapp = new Microsoft.Office.Interop.Word.Application();
    doc = WDapp.Documents.Add(fname);

    doc.SaveAs(newfname); // Сохраняем полученный документ Word

    doc.Close(WdSaveOptions.wdDoNotSaveChanges);
    WDapp.Quit(WdSaveOptions.wdDoNotSaveChanges);
    >
    catch (Exception ex)
    MessageBox.Show(ex.Message, "TestColumnBookmark", MessageBoxButtons.OK, MessageBoxIcon.Error);
    >
    >

    Двумерные данные для вставки в таблицу Word


    private void InsertIntoTable(_Document doc, string[,] Tablerows)
    bool OrigReplaceSelection;
    текстовая строка;
    Закладка bookMark;

    OrigReplaceSelection = doc.Application.Options.ReplaceSelection;
    doc.Application.Options.ReplaceSelection = true; // Убедитесь, что исходный текст в ячейке заменен

    for (int col = 0; col bookMark.Range.Rows.Count)
    bookMark.Range.Rows.Add();
    bookMark.Select();

    // Выбираем конкретную ячейку
    doc.Application.Selection.Cells[row].Select();
    if (string.IsNullOrEmpty(text) == true)
    text = " "; // Для пустого текста убедитесь, что текст в ячейке заменен
    doc.Application.Selection.TypeText(text); // Вставляем значение
    >
    >
    >
    >

    Общие Новости Предложение Вопрос Ошибка Ответ Шутка Похвала Rant Admin

    Используйте Ctrl+Влево/Вправо для переключения сообщений, Ctrl+Вверх/Вниз для переключения тем, Ctrl+Shift+Влево/Вправо для переключения страниц.

    Читайте также: