Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.85/34: Рейтинг темы: голосов - 34, средняя оценка - 4.85
Лень — мое второе и
 Аватар для Orlangur
3224 / 2413 / 686
Регистрация: 28.11.2014
Сообщений: 3,599
Записей в блоге: 3

Шаблон Word документа

30.07.2021, 11:46. Показов 6850. Ответов 30
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приветствую!
Имеется такая задача:
Есть word файл, в нём есть некие переменные данные в виде текста и изображений.
Необходимо будет заменять эти данные из программы. Как лучше это организовать и с помощью чего?
Расставить какие-то метки по тексту и потом искать их? Выделить текст другим цветом? Создать какие-то ссылки?
Может кто-то делал что-то похожее и имеет оптимальный алгоритм?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.07.2021, 11:46
Ответы с готовыми решениями:

Создание документа Word
всем привет. столкнулся с такой проблемой при создании вордовского документа программным путем. Строки записываются одна на другую (заменяя...

Хранить шаблон Word в ресурсах приложения
Ув. Специалисты, имеется такая задумка, в решение visual studio 2010 (vb.) надо добавить шаблон док-та WORD (зашить его в exe),для того...

Отправить сообщение в Word, в подготовленный шаблон
Здравствуйте. Есть такой вопрос, хочу с TextBox1 отправить сообщение в Word, в подготовленный шаблон. Там естественно подготовил место...

30
2228 / 1549 / 393
Регистрация: 26.06.2017
Сообщений: 4,497
Записей в блоге: 1
30.07.2021, 12:27
Лучший ответ Сообщение было отмечено Orlangur как решение

Решение

Я бы использовал закладки. Они никак не влияют на разметку текста и с ними очень удобно работать.
1
Модератор
Эксперт .NET
 Аватар для Yury Komar
4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
30.07.2021, 14:09
Orlangur, Есть еще текстовые поля, доступные на вкладке Developer в MS-Word, я ими пользовался, им так же можно давать имена и обращаться к ним по имени из ПО, по типу закладок, но оставляют возможность ручного ввода в самом документе.
Так же удобство в том, что, можно сам документ заблокировать от внесения изменений, оставляя возможность вводить текст только в эти поля.

А вот с изображениями, не подскажу, скорее всего по порядковому номеру изображения придется их заменять.

Добавлено через 8 минут
Orlangur, пример работы из vb.net:

VB.NET Скопировано
1
2
3
wDoc.FormFields("w_name").Range.Text = TextBox1.Text
'wDoc.FormFields("w_name").Range.InsertAfter(TextBox1.Text)
'wDoc.FormFields("w_name").Range.InsertBefore(TextBox1.Text)
1
2228 / 1549 / 393
Регистрация: 26.06.2017
Сообщений: 4,497
Записей в блоге: 1
30.07.2021, 15:25
Цитата Сообщение от Yury Komar Посмотреть сообщение
но оставляют возможность ручного ввода
Закладки никак не препятствуют вводу в ручную, надо - вводите.
Цитата Сообщение от Yury Komar Посмотреть сообщение
А вот с изображениями
Изображения точно также как и текст можно обернуть закладкой.
1
Модератор
Эксперт .NET
 Аватар для Yury Komar
4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
30.07.2021, 18:42
Uswer, согласен, закладки, бесспорно - удобно, но вот, например, у нас компания имеет свои формы в ворде для ручного заполнения и печати (рабочие документы), т.е. берется оригинал формы (документ заблокирован и разрешено вводить текст только в те поля, о чем я говорил выше), формы разные: на 1 страницу и на 5-7 страниц бывают и таких полей там тьма.
Для удобства я себе софт сделал с базовыми данными и набором таких форм, выбрал форму, ввел обновленные данные и т.п. и при сохранении программа подтягивать базовые и вводит в нужные мест - удобно.
А так да, если это шаблон и не предназначен для ручного редактирования, то закладки - самое оно.
0
Лень — мое второе и
 Аватар для Orlangur
3224 / 2413 / 686
Регистрация: 28.11.2014
Сообщений: 3,599
Записей в блоге: 3
01.08.2021, 10:26  [ТС]
Uswer, Yury Komar, Спасибо, буду пробовать)

Добавлено через 1 час 11 минут
С текстом проблем нет, я могу его найти и заменить через закладку, а с изображением не очень клеится.
Как я понял, через закладку я не смогу получить свойств изображения, что там есть?
Как мне заменить изображение в закладке? То есть, необходимо на место старого изображения вставить новое, но с заданными параметрами, такими как ширина, высота и обтекание текстом
0
2228 / 1549 / 393
Регистрация: 26.06.2017
Сообщений: 4,497
Записей в блоге: 1
01.08.2021, 11:43
С картинками чуть сложнее. Если нужен доступ к картинке как к объекту, то живут они в коллекции Shapes. Поступить можно примерно так: по имени или индексу (как удобнее) получаем свойства картинки, затем убиваем исходную картинку, и после загружаем новую с такими же свойствами, т.е. положением и размерами.
1
 Аватар для ViterAlex
8945 / 4857 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
01.08.2021, 12:16
Цитата Сообщение от Orlangur Посмотреть сообщение
Как я понял, через закладку я не смогу получить свойств изображения, что там есть?
Ну почему же? У закладки есть свойство Range, у которого есть коллекция InlineShapes. Первое изображение в этой коллекции будет искомым.
Подозреваю, что использовать нужно именно InlineShapes, а не ShapeRange, т.к. изображение скорее всего имеет обтекание "В тексте"
1
Лень — мое второе и
 Аватар для Orlangur
3224 / 2413 / 686
Регистрация: 28.11.2014
Сообщений: 3,599
Записей в блоге: 3
01.08.2021, 12:35  [ТС]
ViterAlex, Да, пытался найти изображение в InlineShapes, а оно оказалось в ShapeRange. Обтекание на данный момент стоит "Сверху и снизу", что закидывает его в коллекцию ShapeRange, у которой я не нашел методов для добавления изображения, как у того-же InlineShapes
VB.NET Скопировано
1
doc.Bookmarks.Item("Test4").Range.InlineShapes.AddPicture("test.jpg")
0
 Аватар для ViterAlex
8945 / 4857 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
01.08.2021, 12:45
Лучший ответ Сообщение было отмечено Orlangur как решение

Решение

Цитата Сообщение от Orlangur Посмотреть сообщение
я не нашел методов для добавления изображения, как у того-же InlineShapes
Добавлять нужно в коллекцию Shapes документа, а параметрах метода указывать диапазон, к которому привязывается изображение:
VB.NET Скопировано
1
doc.Shapes.AddPicture("test.jpg", Anchor:=doc.Bookmarks.Item("Test4").Range)
2
Лень — мое второе и
 Аватар для Orlangur
3224 / 2413 / 686
Регистрация: 28.11.2014
Сообщений: 3,599
Записей в блоге: 3
01.08.2021, 17:45  [ТС]
ViterAlex, а как задать ей такое же обтекание? То есть "Сверху и снизу"?
0
2228 / 1549 / 393
Регистрация: 26.06.2017
Сообщений: 4,497
Записей в блоге: 1
01.08.2021, 18:05
Orlangur, вроде так.
2
Лень — мое второе и
 Аватар для Orlangur
3224 / 2413 / 686
Регистрация: 28.11.2014
Сообщений: 3,599
Записей в блоге: 3
01.08.2021, 19:32  [ТС]
Uswer, Yury Komar, ViterAlex, Благодарю за помощь, вроде выглядит как надо, буду дальше мучать
0
Лень — мое второе и
 Аватар для Orlangur
3224 / 2413 / 686
Регистрация: 28.11.2014
Сообщений: 3,599
Записей в блоге: 3
02.08.2021, 13:04  [ТС]
Появился ещё вопрос, что-то не смог найти как получить от существующего изображения эти данные и как их задать только что вставленному
Шаблон Word документа
0
 Аватар для ViterAlex
8945 / 4857 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
02.08.2021, 13:29
см. вложение
Миниатюры
Шаблон Word документа  
1
Лень — мое второе и
 Аватар для Orlangur
3224 / 2413 / 686
Регистрация: 28.11.2014
Сообщений: 3,599
Записей в блоге: 3
02.08.2021, 14:00  [ТС]
ViterAlex, считать данные могу, но почему-то не могу задать их новому изображению, точнее RelativeHorizontalPosition и RelativeVerticalPosition изменяются, а вот Top и Left остаются по нулям
VB.NET Скопировано
1
Dim MShape As Shape = doc.Shapes.AddPicture("PathToJpg", Anchor:=doc.Bookmarks.Item("IMG1").Range, Width:=OldImageWidth, Height:=OldImageHeight)
VB.NET Скопировано
1
2
3
4
MShape.RelativeHorizontalPosition = doc.Bookmarks.Item("IMG1").Range.ShapeRange(1).RelativeHorizontalPosition
            MShape.Left = doc.Bookmarks.Item("IMG1").Range.ShapeRange(1).Left
            MShape.RelativeVerticalPosition = doc.Bookmarks.Item("IMG1").Range.ShapeRange(1).RelativeVerticalPosition
            MShape.Top = doc.Bookmarks.Item("IMG1").Range.ShapeRange(1).Top
Добавлено через 11 минут
Ох, прошу прощения, разобрался)
После добавления изображения, исходное приняло индекс 2)
0
 Аватар для ViterAlex
8945 / 4857 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
02.08.2021, 14:32
Orlangur, как-то очень сложно.
Visual Basic Скопировано
1
2
3
4
'Старая фигура
Dim oldShp = doc.Bookmarks.Item("IMG1").Range.ShapeRange(1)
'Новая фигура
Dim newShp = doc.Shapes.AddPicture("PathToJpg", Anchor:=doc.Bookmarks.Item("IMG1").Range, Width:=oldShp.Width, Height:=oldShp.Height)
И дальше переносишь параметры из старой фигуры в новую. А потом старую удаляешь. И никакой путаницы с индексами.
0
Лень — мое второе и
 Аватар для Orlangur
3224 / 2413 / 686
Регистрация: 28.11.2014
Сообщений: 3,599
Записей в блоге: 3
02.08.2021, 15:06  [ТС]
ViterAlex, да, уже так и сделал)
Как добавлять несколько изображений в одну закладку со смещением тоже разобрался.
С изображениями вроде всё, осталось только научится создавать таблицы и вставлять их заместо имеющихся
0
 Аватар для ViterAlex
8945 / 4857 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
02.08.2021, 15:37
Цитата Сообщение от Orlangur Посмотреть сообщение
осталось только научится создавать таблицы и вставлять их заместо имеющихся
Если структура таблиц одинакова, то не нужно удалять старые, удобнее их просто редактировать.
0
Лень — мое второе и
 Аватар для Orlangur
3224 / 2413 / 686
Регистрация: 28.11.2014
Сообщений: 3,599
Записей в блоге: 3
02.08.2021, 15:40  [ТС]
ViterAlex, по сути одинаковая, только количество строк может быть разное
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.08.2021, 15:40
Помогаю со студенческими работами здесь

Шаблон word-документа
Ув. Форумчане!!! Помогите пожалуйста с формированием doc-файла посредством xml. Я понимаю, что нужно что-то творить с xslt, но что... ...

Как редактировать шаблон документа Microsoft Word через C++ ?
Здравствуйте. Объясните, пожалуйста, каким образом можно редактировать шаблон документа Word 2010 (или хотя бы 2003) с помощью VС++...?...

На оборотной стороне документа word в правой части документа, текст съезжает за границу документа
Добрый вечер. Есть код, который формирует документ из шаблона. И все вроде бы, но происходит что то непонятное. На оборотной стороне...

Заполнение документа Word несколько раз данными из другого документа
есть некий документ Word(test.docx). Нужно создать новый документ(test1.docx), и заполнить его несколько раз данными из первого документа....

Экспорт таблицы из приложения в шаблон документа Excel
Visual Studio 2015 .NET Framework 4 C# Здравствуйте! Нигде не могу найти адекватного примера как данными из таблицы (DataGridView) в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Результаты исследования от команды 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. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер