Word программно вставить таблицу

Обновлено: 28.06.2024

Настоящая документация является предварительной и может быть изменена. В этой статье показано, как использовать классы в пакете Пакет Open XML SDK 2.5 для Office для вставки таблицы в текстовый документ программными средствами.

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

Получение объекта WordprocessingDocument

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

Инструкцию using рекомендуется использовать вместо традиционной последовательности .Create, .Save, .Close. Это позволяет обеспечить автоматический вызов метода Dispose (внутреннего метода, используемого пакетом SDK Open XML для очистки ресурсов) при достижении закрывающей скобки. Блок, следующий за инструкцией using, создает область для объекта, создаваемого или именуемого в инструкции using, в данном случае doc. Так как класс WordprocessingDocument в пакете SDK Open XML автоматически сохраняет и закрывает объект как часть реализации System.IDisposable, а также поскольку метод Dispose вызывается автоматически при выходе из блока, не нужно явно вызывать методы Save и Close, если используется инструкция using.

Структура таблицы

Базовая структура документа WordProcessingML состоит из элементов document и body. За ними следуют один или более элементов уровня блока, таких как p, который представляет абзац. Абзац содержит один или несколько элементов r. Элемент r означает пробег, область текста с общим набором свойств, таких как форматирование. Пробег состоит из одного или нескольких элементов t. Элемент t содержит текстовый диапазон. В этом примере документ должен содержать таблицу. Таблица представляет собой набор абзацев (и другого содержимого на уровне блоков), распределенных по строкам и столбцам. Таблицы в документе WordprocessingML определяются с помощью элемента tbl, аналогичного HTML-тегу таблицы. Рассмотрим пустую таблицу с одной ячейкой (то есть с одной строкой и одним столбцом) и границей толщиной в 1 точку со всех сторон. Эта таблица представлена следующим сегментом разметки WordprocessingML.

Для этой таблицы задаются следующие свойства: ширина, составляющая 100 % от ширины страницы (элемент tblW), набор границ таблицы (элемент tblBorders), сетка таблицы, определяющая набор общих вертикальных границ внутри таблицы (элемент tblGrid) и единственная строка таблицы (элемент tr).

Как работает пример кода

В примере кода после открытия документа в операторе using создается новый объект Table. Затем создается объект TableProperties и задаются данные о его границе. Класс TableProperties содержит перегруженный конструктор TableProperties(), принимающий массив params типа OpenXmlElement. В коде этот конструктор используется для создания экземпляра объекта TableProperties с объектами BorderType для каждой границы. При этом создается экземпляр каждого из объектов BorderType и задается их значение с помощью инициализаторов объектов. После создания экземпляра добавьте объект TableProperties в таблицу.

Код создает строку таблицы. В этом разделе кода применяются перегруженные методы Append[]), классы которых являются производными от наследника OpenXmlElement. Методы Append позволяют добавить один элемент или часть дерева XML в конец списка дочерних элементов под указанным родительским элементом. Затем код создает объект TableCell, который представляет отдельную ячейку таблицы, и задает свойство ширины ячейки таблицы с помощью объекта TableCellProperties, а также содержимое ячейки ("Hello, World!") с помощью объекта Text. В схеме Open XML Wordprocessing элемент абзаца (<p>) содержит элементы пробега (<r>), которые, в свою очередь, содержат элементы текста (<t>). Чтобы вставить текст в ячейку таблицы, используя API, нужно создать объект Paragraph, который содержит объект Run, включающий объект Text с текстом, который нужно вставить в ячейку. Затем объект Paragraph добавляется к объекту TableCell. При этом создается нужная структура XML для вставки текста в ячейку. После этого TableCell добавляется к объекту TableRow.

Затем в коде создается вторая ячейка таблицы. В последнем разделе кода создается еще одна ячейка таблицы с помощью перегруженного конструктора TableCell, TableCell(String), который принимает свойство OuterXml существующего объекта TableCell в качестве единственного аргумента. После создания второй ячейки код добавляет объект TableCell к TableRow, TableRow — к Table, а Table — к объекту Document.

Пример кода

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

После запуска программы откройте файл "Word10.docx" и проверьте, вставлена ли таблица.

Коллекция Tables является членом классов Document, Document, Selection и Range. Это означает, что таблицу можно создать в любом из их контекстов. Для добавления таблицы в указанном диапазоне можно использовать метод Add коллекции Tables.

Применимо к: Сведения в этом разделе относятся к - проектам уровня документа и добавлению VSTO - в проектах для Word. Дополнительные сведения см. в разделе доступность функций по типам приложений Office и проектов.

Создание таблиц в настройках уровня документа

Добавление таблицы в документ

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

Чтобы использовать следующий пример кода, выполните его из класса ThisDocument в своем проекте.

При создании таблицы она автоматически добавляется в коллекцию Tables ведущего элемента Document. Затем на таблицу можно ссылаться по номеру ее элемента с помощью свойства Item[], как показано в следующем коде.

Ссылка на таблицу по номеру элемента

Используйте свойство Item[] и укажите номер элемента таблицы, на которую необходимо ссылаться.

Чтобы использовать следующий пример кода, выполните его из класса ThisDocument в своем проекте.

Каждый объект Table также имеет свойство Range, которое позволяет настроить атрибуты форматирования.

Применение стиля к таблице

Для применения одного из встроенных стилей Word к таблице используйте свойство Style.

Чтобы использовать следующий пример кода, выполните его из класса ThisDocument в своем проекте.

создание таблиц в VSTO надстройках

Добавление таблицы в документ

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

Следующий пример кода добавляет таблицу в активный документ. Чтобы использовать этот пример, запустите код из класса ThisAddIn в своем проекте.

При создании таблицы она автоматически добавляется в коллекцию Tables в Document. Затем на таблицу можно ссылаться по номеру ее элемента с помощью свойства Item[], как показано в следующем коде.

Ссылка на таблицу по номеру элемента

Используйте свойство Item[] и укажите номер элемента таблицы, на которую необходимо ссылаться.

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

Каждый объект Table также имеет свойство Range, которое позволяет настроить атрибуты форматирования.

Применение стиля к таблице

Для применения одного из встроенных стилей Word к таблице используйте свойство Style.

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

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

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

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

Что значит сформировать файл Ворд?

В связи с неоднозначностью сложившейся терминологии, считаю нужным пояснить. Под формированием файла Ворд по пользовательскому шаблону я подразумеваю следующий процесс. Пользователь передает разработчику файл с образцом документа, который хочет получать из информационной системы в автоматизированном режиме. Разработчик дорабатывает информационную систему таким образом, чтобы она позволяла формировать файлы, точно соответствующие первоначальному образцу. Точно, значит без явных указаний пользователя разработчик не меняет по своему усмотрению ни одного элемента форматирования, ни шрифт, ни размер, ни поля, ни колонтитулы. НИЧЕГО не меняет. Совершенно ничего. На выходе пользователь должен получить документ неотличимый от документа, созданного собственноручно.

Способы формирования файла Ворд

Работа программы по формированию файла сводится к модификации образца, предоставленного пользователем. К счастью, пользователи приложений, построенных на базе 1С-Предприятия, люди скучные. И их запросы к формированию файлов невелики. Им не требуются информационные буклеты или рекламные плакаты. Им нужны документы. Договоры, акты, письма, исковые заявления, и т.д. Потому обработка файла программой сводится к замене (вставке) текста на полученный из базы данных, удаление каких-то блоков текста и, быть может, вставке небольших картинок, например, логотипа или штрих-кода.

Существует два популярных способа работы с файлами Ворд:

1. Через СОМ-Объект Ворд.

2. Через непосредственную модификацию файлов docx

Главное отличие между ними заключается в том, что первый способ предоставляет разработчику инструмент - полнофункциональный API, позволяющий делать с документом все то же самое, что может делает пользователь, непосредственно работая в редакторе. Второй же способ предполагает собственную разработку инструмента, на основании документации по формату хранения файла. Если функциональность разработанного инструмента перестанет удовлетворять возникающим потребностям - придется разрабатывать (или искать) новый инструмент. В то время как модернизация кода основанного на API СОМ-объектов не представляет сложностей.

Первый способ предполагает, что на том компьютере, где будет исполняться код приложения и формироваться файл, установлен Майкрософт Офис. При установке, Офис регистрирует в Виндоус СОМ-объекты для каждого из приложений входящих в пакет. Таким образом, другие приложения, запущенные на компьютере, могут через интерфейс СОМ-объектов выполнять любые действия с документами офисных приложений, возможности предоставленного программного интерфейса, как минимум, не уступают возможностям пользователя, редактирующего документ непосредственно в приложении.

Главная проблема примеров из интернета по рассматриваемой теме - игнорируется тот факт, что за компьютером сидит живой пользователь. Видимо, предполагается, что после нажатия кнопки "сформировать файл", пользователь должен замереть, не дышать, не дотрагиваться до мыши и клавиатуры в течение всего времени создания файла. А ведь формирование каждого файла может занимать заметное время, в некоторых случаях - больше минуты. И ладно бы вопрос стоял "или так или никак". Но ведь на самом деле, нет. Можно работать с СОМ-Объектом параллельно с работой пользователя, код чувствительный действиям пользователя не имеет никаких преимуществ перед кодом, не мешающим пользователю. Единственная причина, по которой он используется - нежелание разработчика вникнуть в проблему и рассмотреть альтернативные варианты решения.

Код языка 1С для работы с СОМ-Объектами на сервере и на клиенте ничем не отличается. Единственное, за сервером не работает реальный пользователь, поэтому проблема неудачного кода не выплывает с такой остротой. Повторюсь, преимуществ у такого кода все равно нет. Тем более, что код нужно отлаживать, часто это удобнее делать на клиенте, вот и появился пользователь. А еще, может потребоваться перенос работающего кода с сервера на клиент, например, в рамках рефакторинга и изменения архитектуры приложения. А еще, код может работать в файловой базе, где "сервер" очень условен - программный слой, запускаемый на машине каждого пользователя. Таким образом, лучше всего исходить из того, что пользователь за компьютером есть всегда.

Объектная модель Ворд

Ворд, запущенный в качестве СОМ-Объекта, предоставляет доступ к множеству объектов приложения. Понятие "объект" такое же как везде - программная абстракция, имеющая методы и свойства. Методы могут быть как процедурами, так и функциями, при этом функции можно вызывать как процедуры, игнорируя возвращаемое значение. Свойства могут быть либо объектами, либо обычными (скалярными, примитивными) данными, такими как число, строка, логический тип.

Среди объектов особо выделяются специальные объекты-контейнеры, называемые коллекциями. Каждая коллекция предназначена для хранения ссылок на группу однотипных объектов. Например, коллекция Documents хранит ссылки на объекты Document, коллекция Tables хранит ссылки на объекты Table и т.д. Все коллекции именованы во множественном числе, а обычные объекты в единственном. Нумерация объектов в коллекции начинается с единицы. Коллекции Ворд можно перебирать циклом "Для каждого" языка программирования 1С.

Полный список объектов можно, и нужно, смотреть в справочной системе Ворд (раздел справки по Вижуал Бейсику (VBA)). Для старых версий справка откроется локально на компьютере пользователя. Новые версии отправят на сайт Майкрософт: en-us /office/vba/api/overview/word/object-model

Многие методы объектов Ворда в качестве параметров принимают числовые значения. Для того, чтобы не путаться в числовых значениях, в Вижуал Бейсике предусмотрены именованные константы. Например, константа wdFormatRTF соответствует числу 6. В Вижуал Бейсике можно писать код так:

Вне VBA именованные константы недоступны, поэтому код 1С будет таким:

Или, без “магических” чисел, таким:

Я предпочитают последний вариант, терпеть не могу непонятных чисел в коде.

Запуск Ворд, открытие файла

Традиционно, первые три строчки работы СОМ-Объектом Ворд выглядят так:

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

Запускает приложение Ворд и возвращает на него ссылку. Теперь по ссылке Word мы можем обращаться к СОМ-объекту. Возникает закономерный вопрос, влияет ли как-то окружение, в момент выполнения команды, на результат её работы? Из окружения нас интересует в первую очередь интерактивная работа пользователя с Вордом. Возможны два варианта:

- в момент выполнения Ворд запущен (имеются открытые пользователем файлы)

- в момент вызова Ворд не запущен

Так вот, нет, не влияет. Ворд запускается как новый экземпляр приложения, коллекция Documents запущенного приложения не содержит ни одной ссылки, т.е. доступа к ранее открытым документам через ссылку Word не получить.
Но, после запуска СОМ-Объекта, новые, открываемые пользователем, файлы могут открыться именно в этом экземпляре Ворда. Для пользователя разницы нет, но нам это следует, на всякий случай, учитывать.

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

Свойству Visible желательно присвоить одно из значений. В противном случае, СОМ-Объект Ворд откроется в скрытом режиме. Но если пользователь откроет какой-нибудь файл, то наш редактируемый файл может неожиданно стать видимым. С другой стороны, если пользователь успеет открыть свой файл после запуска СОМ-Объекта, но перед тем, как будет выполнено присвоение свойству значения Ложь , то открытый файл станет невидимым и недоступным для редактирования пользователем.

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

Перейдем к неправильной части примера

Открывает файл, в терминологии Ворд открытый файл называется "документ". Далее нужно получить ссылку на открытый документ, чтобы потом по этой ссылке можно было с ним работать. Вы можете найти такие примеры:

Ну что ж, разумно. Предполагаем, что открыт только наш документ, соответственно в коллекции Documents есть единственный элемент, значит этот элемент имеет индекс равный единице. Это работает, вероятность того, что пользователь успеет открыть файл в промежуток времени, между запуском СОМ-Объекта и этим присваиванием, ничтожно мала.

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

Примеры чуточку безумные:

WTF? Хотя, безусловно, работает. С теми же оговорками, что и выше.

Как программировать неправильно, выяснили, теперь о том, как открывать документы правильно.

Для открытия документа можно использовать два метода коллекции Documents . Первый - Open() приведен выше, второй - Add() .

Метод Open() открывает файл для редактирования в Ворде, документ остается связанным с этим файлом - в заголовке окна Ворд указывается имя файла. Открыть можно любой файл, поддерживаемый Вордом, формат файла при редактировании не меняется. Например, открыли файл .rtf, отредактировали, сохранили, файл остался .rtf. Открывать непосредственно шаблон из папки, в которой хранятся шаблоны таким способом не стоит. Если что-то произойдет не так, например, сработает автосохранение в Ворде, шаблон будет испорчен. Сначала файл шаблона следует скопировать (при работе в клиент-серверном варианте это само собой разумеющиеся действие), а потом можно открывать.

Метод Add() создает новый документ на основании указанного шаблона. Шаблоном может быть любой файл, не обязательно родные для Ворда .doc или .docx или .dot. Открытый документ с файлом-шаблоном не связывается, в заголовке окна Ворд будет надпись "Документ1 - Word". При этом информация о формате исходного файла не сохраняется. Открывается просто документ Ворд, содержащий в себе всю информацию из указанного файла. При сохранении без явного указания типа файла он будет сохранен как .docx. Единственное исключение - документ, открытый на основе файла .doc, такие документы по умолчанию сохраняются в файлы .doc. Метод Add() можно использовать для создания документов на основании оригинала шаблона, шаблон повредить невозможно даже случайно.

Методы Open() и Add() являются функциями, т.е. возвращают значение. Причем возвращают они ссылку на новый документ. И ловить потом этот документ в коллекции Documents нам не нужно, ссылку можно сразу сохранить в переменной для дальнейшего использования. Таким образом, для открытия используются следующие команды:

Когда шаблон заполнен требуемым образом его необходимо сохранить. Самый простой вариант, если файл открыли методом Open() , для сохранения достаточно вызвать метод Save() :

Если же документ еще не связан с файлом, нужно вызвать метод SaveAs() :

Если формат по умолчанию нас не устраивает, вторым параметром метода можно явно задать тип файла:

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

Имеется в виду, что не будет ошибки времени выполнения. Однако, приведенный выше пример идеологически неверен. Допустим, через некоторое время шаблон был заменен и файл шаблона получил расширение .docx. Для внесения изменений в программу нам потребуется две правки, первая в методе Add() , вторая в методе SaveAs() . В этом и проблема, код дублируется, одно изменение должно вносится в одном месте программы, а не в разных. Если расширение файла не будет указано, при сохранении будет добавлено расширение, соответствующее типу сохраняемого файла. Если же расширение будет указано неверно, т.е. не будет соответствовать типу файла, то. либо получаем ошибку времени исполнения, либо файл сохранится в формате, не соответствующем расширению (в зависимости от комбинации тип/расширение возможно и то и другое). Обе ситуации ненормальны. Ошибка времени выполнения, конечно, будет отловлена на этапе тестирования. А ошибка несоответствия расширения фактическому типу данных выйдет потом боком пользователю.

Завершение работы с СОМ-Объектом рекомендуют (неправильно) делать так:

На первый взгляд, можно и не заметить нолик в параметре метода Quit() . А он важен. Это просто константа wdDoNotSaveChanges :-). Закрыться-то Ворд закроется, вместе со всеми файлами, которые пользователь, возможно, открыл и редактирует.

Если мы исходим из предположения, а мы из него исходим, что пользователь может работать интерактивно со своими собственными файлами, которые могут быть открыты в том же экземпляре Ворда, что и наш СОМ-Объект, то торопиться принудительно выгонять пользователей и закрывать экземпляр приложения не стоит. Можно проверить, есть ли еще открытые документы, кроме нашего. Если есть, не закрывать экземпляр Ворда, пусть пользователь спокойно работает, если других документов нет - закрыть:

Не очень популярный, но иногда встречающийся способ.

Сначала в документ добавляются пользовательские свойства. Для Ворда 2016 это делается так:

Есть шаблон документа word (.dot, при открытии вроде бы все работает так же, как и если бы просто обычный документ). Надо вставить в определенное место таблицу с некими данными (место отмечено $TABLE1$, т.е. надо заменить эту строку).

Как это сделать? Если просто заменить строку на другую строку, то вроде есть решения, а вот таблицу.

Код открытия и т.п. на всякий случай:

Вставить картинку в таблицу Word
поделитесь кодом вставки картинки в ячейку таблицы в word Добавлено через 6 минут wdRow :=.


Вставить таблицу в колонтитул MS Word
Приветствую всех! Подскажите как в колонтитул Ворд вставить таблицу? Спасибо.

Вставить таблицу в ячейку таблицы word
собственно вопрос как это сделать?))))


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

Надо найти шаблон "$TABLE1$", определить объект Range, который охватывает весь текст этого шаблона, а затем текст этого объекта Range заменить на таблицу:
Здесь wdDoc - ссылка на интерфейс документа Word.Document (в Delphi: Variant), wdRng - объект типа Word.Range (в Delphi: Variant), который охватывает весь текст шаблона.
---
Кроме этого, в задаче, скорее всего надо не загружать шаблон, как сейчас сделано, а создавать новый документ на основе шаблона. Это делается так:
по умолчанию оно вроде как раз создает через Опен +saveas вроде не изменяет исходный даже если открыт.

А что, прям так и надо .Add(Template:=<Полное имя файла шаблона>)? Или просто .Add(<Полное имя файла шаблона>) хватит?

А что, прям так и надо .Add(Template:=<Полное имя файла шаблона>)? Или просто .Add(<Полное имя файла шаблона>) хватит? Здесь имя параметра "Template:=" можно не указывать, потому что этот параметр в методе Add() стоит на первом месте. Documents - это объект-коллекция. И эта коллекция содержит элементы типа Word.Document. Поэтому, собственно, отдельный документ имеет тип Word.Document. Word.Document - это тип в MS Word, а не в Delphi.
---
И ещё предложу вместо текстовых шаблонов в документе применять закладки MS Word - Bookmarks. Пример с проектом, как это можно использовать, представлен здесь: Как заполнить файл MS Word через делфи?
Удобство этого способа ещё в том, что через закладки Bookmark можно сразу получить место вставки в виде диапазона Range.
---
В этом проекте для вставки таблиц надо будет по аналогии с функцией SetBmText() написать функцию SetBmTable(). Поэтому, собственно, отдельный документ имеет тип Word.Document. Word.Document - это тип в MS Word, а не в Delphi. Ну да, я и говорю, что при создании\открытии документа обращаться надо к коллекции Documents, а не к WordApp.Document, которого там естественно нет.

но если создавать так:

то получается вот так (таблица разделяется на две):

наверно тут надо как-то добавлять\вставлять строки к существующей таблице, но таблиц в документе больше одной и надо как-то найти нужную.

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

Word и Delphi (шаблон)
Добрый день Возник вопрос, есть код, который выводит хранимую процедуру по определенному вводимому.

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


Шаблон Word и данные формы
Доброго времени суток ! Имеется форма которая связанна с базой данных и имеется шаблон Word в.


Как с помощью Recordset вставить данные в шаблон Word
Добрый день. Подскажите как с помощью Recordset вставить данные в шаблон Word. Set MyTable =.

Вставить таблицу в шаблон средствами XML и phpWord
Я делаю экспорт из php в Word с помощью библиотеки phpWord. В шаблоне Word проставлены метки.

Вставить таблицу из Word с сохранением формул
Как вставить таблицу из Ворда в Эксель, чтобы сохранились формулы, прописанные в ворде?

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