Лень — мое второе и
![]() |
|
Шаблон Word документа30.07.2021, 11:46. Показов 6850. Ответов 30
Метки нет Все метки)
(
Приветствую!
Имеется такая задача: Есть word файл, в нём есть некие переменные данные в виде текста и изображений. Необходимо будет заменять эти данные из программы. Как лучше это организовать и с помощью чего? Расставить какие-то метки по тексту и потом искать их? Выделить текст другим цветом? Создать какие-то ссылки? Может кто-то делал что-то похожее и имеет оптимальный алгоритм?
0
|
30.07.2021, 11:46 | |
Ответы с готовыми решениями:
30
Создание документа Word Хранить шаблон Word в ресурсах приложения
|
Модератор
![]() ![]() 4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
|
||||||
30.07.2021, 14:09 | ||||||
Orlangur, Есть еще текстовые поля, доступные на вкладке Developer в MS-Word, я ими пользовался, им так же можно давать имена и обращаться к ним по имени из ПО, по типу закладок, но оставляют возможность ручного ввода в самом документе.
Так же удобство в том, что, можно сам документ заблокировать от внесения изменений, оставляя возможность вводить текст только в эти поля. А вот с изображениями, не подскажу, скорее всего по порядковому номеру изображения придется их заменять. Добавлено через 8 минут Orlangur, пример работы из vb.net:
1
|
Модератор
![]() ![]() 4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
|
|
30.07.2021, 18:42 | |
Uswer, согласен, закладки, бесспорно - удобно, но вот, например, у нас компания имеет свои формы в ворде для ручного заполнения и печати (рабочие документы), т.е. берется оригинал формы (документ заблокирован и разрешено вводить текст только в те поля, о чем я говорил выше), формы разные: на 1 страницу и на 5-7 страниц бывают и таких полей там тьма.
Для удобства я себе софт сделал с базовыми данными и набором таких форм, выбрал форму, ввел обновленные данные и т.п. и при сохранении программа подтягивать базовые и вводит в нужные мест - удобно. А так да, если это шаблон и не предназначен для ручного редактирования, то закладки - самое оно.
0
|
Лень — мое второе и
![]() |
|
01.08.2021, 10:26 [ТС] | |
Uswer, Yury Komar, Спасибо, буду пробовать)
Добавлено через 1 час 11 минут С текстом проблем нет, я могу его найти и заменить через закладку, а с изображением не очень клеится. Как я понял, через закладку я не смогу получить свойств изображения, что там есть? Как мне заменить изображение в закладке? То есть, необходимо на место старого изображения вставить новое, но с заданными параметрами, такими как ширина, высота и обтекание текстом
0
|
01.08.2021, 11:43 | |
С картинками чуть сложнее. Если нужен доступ к картинке как к объекту, то живут они в коллекции Shapes. Поступить можно примерно так: по имени или индексу (как удобнее) получаем свойства картинки, затем убиваем исходную картинку, и после загружаем новую с такими же свойствами, т.е. положением и размерами.
1
|
![]() 8945 / 4857 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
|
|
01.08.2021, 12:16 | |
Ну почему же? У закладки есть свойство Range, у которого есть коллекция InlineShapes. Первое изображение в этой коллекции будет искомым.
Подозреваю, что использовать нужно именно InlineShapes, а не ShapeRange, т.к. изображение скорее всего имеет обтекание "В тексте"
1
|
Лень — мое второе и
![]() |
||||||
01.08.2021, 12:35 [ТС] | ||||||
ViterAlex, Да, пытался найти изображение в InlineShapes, а оно оказалось в ShapeRange. Обтекание на данный момент стоит "Сверху и снизу", что закидывает его в коллекцию ShapeRange, у которой я не нашел методов для добавления изображения, как у того-же InlineShapes
0
|
![]() 8945 / 4857 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
|
||||||
01.08.2021, 12:45 | ||||||
![]() Решение
Добавлять нужно в коллекцию Shapes документа, а параметрах метода указывать диапазон, к которому привязывается изображение:
2
|
Лень — мое второе и
![]() |
|
01.08.2021, 17:45 [ТС] | |
ViterAlex, а как задать ей такое же обтекание? То есть "Сверху и снизу"?
0
|
Лень — мое второе и
![]() |
|
01.08.2021, 19:32 [ТС] | |
Uswer, Yury Komar, ViterAlex, Благодарю за помощь, вроде выглядит как надо, буду дальше мучать
![]()
0
|
Лень — мое второе и
![]() |
|
02.08.2021, 13:04 [ТС] | |
Появился ещё вопрос, что-то не смог найти как получить от существующего изображения эти данные и как их задать только что вставленному
0
|
Лень — мое второе и
![]() |
|||||||||||
02.08.2021, 14:00 [ТС] | |||||||||||
ViterAlex, считать данные могу, но почему-то не могу задать их новому изображению, точнее RelativeHorizontalPosition и RelativeVerticalPosition изменяются, а вот Top и Left остаются по нулям
Ох, прошу прощения, разобрался) После добавления изображения, исходное приняло индекс 2)
0
|
![]() 8945 / 4857 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
|
||||||
02.08.2021, 14:32 | ||||||
Orlangur, как-то очень сложно.
0
|
Лень — мое второе и
![]() |
|
02.08.2021, 15:06 [ТС] | |
ViterAlex, да, уже так и сделал)
Как добавлять несколько изображений в одну закладку со смещением тоже разобрался. С изображениями вроде всё, осталось только научится создавать таблицы и вставлять их заместо имеющихся
0
|
Лень — мое второе и
![]() |
|
02.08.2021, 15:40 [ТС] | |
ViterAlex, по сути одинаковая, только количество строк может быть разное
0
|
02.08.2021, 15:40 | ||||||
Помогаю со студенческими работами здесь
20
Шаблон word-документа Как редактировать шаблон документа Microsoft Word через C++ ? На оборотной стороне документа word в правой части документа, текст съезжает за границу документа Заполнение документа Word несколько раз данными из другого документа Экспорт таблицы из приложения в шаблон документа Excel Искать еще темы с ответами Или воспользуйтесь поиском по форуму:
|
|
Новые блоги и статьи
![]() |
||||
Результаты исследования от команды MCM (март 2025 г.)
Programma_Boinc 07.04.2025
Результаты исследования от команды MCM (март 2025 г. )
В рамках наших текущих исследований мы продолжаем изучать гены, которые имеют наибольшую вероятность развития рака легких, выявленные в рамках. . .
|
Рекурсивные типы в Python
py-thonny 07.04.2025
Рекурсивные типы - это типы данных, которые определяются через самих себя или в сочетании с другими типами, которые в свою очередь ссылаются на исходный тип. В мире программирования такие структуры. . .
|
C++26: Объединение и конкатенация последовательностей и диапазонов в std::ranges
NullReferenced 07.04.2025
Работа с последовательностями данных – одна из фундаментальных задач, с которой сталкивается каждый разработчик. C++ прошел длинный путь в эволюции средств для манипуляции коллекциями – от. . .
|
Обмен данными в микросервисной архитектуре
ArchitectMsa 06.04.2025
Когда разработчики начинают погружаться в мир микросервисов, они часто сталкиваются с парадоксальным правилом: "два сервиса не должны делить один источник данных". Эта мантра звучит повсюду в. . .
|
PostgreSQL в Kubernetes: Автоматизация обслуживания с CNPG
Mr. Docker 06.04.2025
Администраторы баз данных сталкиваются с целым рядом проблем при обслуживании PostgreSQL в Kubernetes: как обеспечить правильную репликацию данных, как настроить автоматическое переключение при. . .
|
Async/await в TypeScript
run.dev 06.04.2025
Асинхронное программирование — это подход к разработке программного обеспечения, при котором операции выполняются независимо друг от друга. В отличие от синхронного выполнения, где каждая последующая. . .
|
Многопоточность в C#: Синхронизация потоков
UnmanagedCoder 06.04.2025
Многопоточное программирование стало неотъемлемой частью разработки современных приложений на C#. С появлением многоядерных процессоров возможность выполнять несколько задач параллельно значительно. . .
|
TypeScript: Классы и конструкторы
run.dev 06.04.2025
TypeScript, как статически типизированный язык, построенный на основе JavaScript, привнес в веб-разработку новый уровень надежности и структурированности кода. Одним из важнейших элементов этой. . .
|
Многопоточное программирование: Rust против C++
golander 06.04.2025
C++ существует уже несколько десятилетий и его поддержка параллелизма постепенно наращивалась со временем. Начиная с C++11, язык получил стандартную библиотеку для работы с потоками, а в последующих. . .
|
std::vector в C++: от основ к оптимизации производительности
NullReferenced 05.04.2025
Для многих программистов знакомство с std::vector происходит на ранних этапах изучения языка, но между базовым пониманием и подлинным мастерством лежит огромная дистанция. Контейнер std::vector. . .
|