Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 11.10.2020
Сообщений: 46
Delphi 6-7

В документ MS Word записывать одно и то же значение в целую группу закладок

22.10.2021, 10:13. Показов 3024. Ответов 21

Студворк — интернет-сервис помощи студентам
Добрый день, форумчане. Столкнулся с необходимостью в документе MS Word записывать одно и то же значение в целую группу закладок. Т. е., например, в документе может быть несколько мест, где нужно вставить одно и то же имя и фамилию. Не могу этого сделать. Помогите, пожалуйста.

Значения закладок записываются в MS WORD на примере предоставленном, Mawrat: Как записать данные в файл MS Word

Читал и пытался использовать пример, D1973 из поста #8 взятом вот отсюда: Поиск в WORD и замена на свой текст.

Но, в примере, D1973 названия закладок имеют одинаковую длину в 2 символа (z1) и изменяется только префикс. Пример отличный и работает. Однако у меня имена закладок разной длины и я не могу понять как мне пример, D1973 переделать. Еще один нюанс данного примера в том, что он копирует последний символ имени и переводит его в число и на основе этого производит поиск и запись значения в закладку. Но если этих закладок будет больше 10, то соответственно он не будет находить нужную закладку.

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

Я уже отчаялся. Помогите мне кто-нибудь, пожалуйста. Архив с примером прикладываю. Изменил в нем шаблон, в котором есть несколько закладок, в которые необходимо записать одинаковые значения.
Вложения
Тип файла: rar Закладки_Одинаковые имена.rar (193.8 Кб, 12 просмотров)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.10.2021, 10:13
Ответы с готовыми решениями:

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

Как записывать целую часть у дробного числа
Как в мат кад записывать целое у дробного числа. Например 1 1\3? Обязательно нужно 4/3?

Как двигать целую группу слоев?
Как двигать группу слоев целиком, как на этом видео? https://www.loom.com/share/e4d1166cd82b4668a5f481dedfb75e8a Спасибо.

21
Модератор
 Аватар для D1973
9929 / 6467 / 2457
Регистрация: 21.01.2014
Сообщений: 27,428
Записей в блоге: 3
22.10.2021, 16:19
Лучший ответ Сообщение было отмечено sshmatko как решение

Решение

Студворк — интернет-сервис помощи студентам
Цитата Сообщение от sshmatko Посмотреть сообщение
но не получилось.
Ох, беда... А я считал, что понятно объяснил... Видимо, переоценил я свои способности популяризатора.

Не по теме:

Из за Вас пришлось офис ставить, блин...



Ладно, если прошлый раз был "объяснение на пальцах", то сейчас будет "объяснение на..." (даже не знаю, на чем, чтобы было проще, чем на пальцах )

1. Постановка задачи:
Требуется заполнить документ Word данными, а именно: в определенные места в документе необходимо вставить
А) ФИО
Б) серию и № документа
В) дату рождения
Каждый из типов данных (А, Б и В) встречается в документе несколько раз.

2. Подготовка шаблона документа
Создаю документ MS Word. Пишу / копирую в него текст. Определяю места в документе, на которые должны будут подставляться данные, и вставляю в эти позиции закладки.
Каждая закладка в документе Word должна удовлетворять следующим условиям:
- Имя закладки начинается только с буквы
- Имя закладки уникально в текущем документе
- Длина имени закладки не может превышать 40 символов.
Я имею 3 вида вставляемых данных, А, Б и В (см. предыдущий пункт), поэтому для удобства восприятия и для сокращения кода придумываю формат имени для закладок: zN_SSS... где
z - просто произвольная буква, стоящая на первом месте, потому что см. первое ограничение для имен закладок выше. Букву лучше делать латинскую, иначе с национальными алфавитами можно напороться на непонимание...
N - номер группы закладок (про группы закладок см. ниже). Я сам создаю документ, сам определяю, сколько видов данных будет вставлено в документ, поэтому я знаю, сколько групп у меня будет и скольки -значное число мне надо будет использовать.
_ - просто разделитель между номером группы и дальнейшим именем. Может быть задействован для вычленения номера группы из имени закладки.
SSS... - собственно имя закладки. Если не лень писать - можете вбить в это имя все, что уложится в 30+ символов. Лично мне писать всегда день, поэтому я использую короткие имена: z<Номер группы>_<Номер в группе>. И коротко и уникальность имени обеспечена.

Не по теме:

Важно! Это я сам для себя придумал! Это нигде не регламентировано, это только моя фантазия! Точно так же, как и моя фантазия - группы закладок. Такого понятия нет, но вот мне удобно им оперировать и я его придумал и пользуюсь. Ну а кто мне запретит, в самом-то деле?


Систематизируем закладки в документе следующим образом:
В группу с номером 1 относим те закладки, на место которых будет подставлено ФИО
В группу с номером 2 относим те закладки, на место которых будет подставлены серия и номер документа
В группу с номером 3 относим те закладки, на место которых будет подставлена дата рождения.
Контрольный вопрос: что будет вставлено на месте закладки с именем [B]z3_Охренительнодлинноеимя7[/B]?

Не по теме:

Если не ответили - можете сразу бросать это дело, я тогда не знаю, как еще объяснить...


Все, текст набран, закладки созданы и расставлены по местам - сохраняем документ и переходим к Delphi
3. Реализация
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
procedure TForm1.Button1Click(Sender: TObject);
const begin_num = 2;
var W, WD: OLEVariant;
    f, nf: String;
    i, j: integer;
begin
  f := 'd:\TMP\tmp.docx';
  nf := 'd:\TMP\new_doc1.docx';
  try
    W := CreateOleObject('Word.Application');
    try
      WD := W.Documents.Open(f);
      for i := 1 to WD.Bookmarks.Count do begin
      j := StrToInt(Copy(WD.Bookmarks.Item(i).Name, begin_num, Pos('_', WD.Bookmarks.Item(i).Name) - begin_num));
        case j of
          1 : WD.Bookmarks.Item(i).Range.Text := Edit1.Text;
          2 : WD.Bookmarks.Item(i).Range.Text := Edit2.Text;
          3 : WD.Bookmarks.Item(i).Range.Text := Edit3.Text;
        end;
      end;
      W.DisplayAlerts := False;
      WD.SaveAs(nf);
      W.DisplayAlerts := True;
    finally
      WD.Close;
      W.Quit;
    end;
  except
    ShowMessage('Не удалось запустить MS Word. Действие отменено.');
  end;
end;
тут вообще все очень просто:
а) задаю имена файлов: шаблона и нового документа, полученного при заполнении шаблона.
б) создаю экземпляр Word Document и гружу в него файл шаблона.
в) начинаю обход списка закладок
г) вычленяю из имени очередной закладки номер группы и присваиваю этот номер целочисленной переменной. Номер может быть произвольной длины: слева он ограничен символом z, справа - символом _, все что между ними - то номер
д) в зависимости от номера вставляю тот или иной текст
е) сохраняю под ранее определенным именем и выхожу.

ВСЕ!!!
(скрин 1 - шаблон. Видны места закладок
скрин 2 - новый заполненный файл после нажатия на кнопку программы)
Миниатюры
В документ MS Word записывать одно и то же значение в целую группу закладок   В документ MS Word записывать одно и то же значение в целую группу закладок  
2
0 / 0 / 0
Регистрация: 11.10.2020
Сообщений: 46
22.10.2021, 16:41  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
Если не ответили - можете сразу бросать это дело, я тогда не знаю, как еще объяснить...


Спасибо огромное за такой развернутый ответ, а самое главное без дополнительных велосипедов. Спасибо, всем кто откликнулся. Ваша поддержка неоценима.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.10.2021, 16:41
Помогаю со студенческими работами здесь

Форматирование закладок в Word
Здравствуйте! Подскажите, как реализовать такую задачу. Есть документ, в нем есть много повторяющихся элементов. Реализовал ввод в...

Чтение закладок из Word
Как при помощи OLE сервера прочитать закладку и вообще ли это возможно. PatientOne - обьект класа Patient void FillPatient(String...

OpenXML и замена закладок в Word
Добрый день, требуется заменять закладки в файле docx, использовать interop не хочется, так как очень уж медленная эта штука. Смотрю в...

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

Автоматическое заполенение TextBox из закладок MS Word
Помогите написать строчку кода. Суть в том что при вызове формы (Надстройки) в ней должны заполнятся поля из закладок. То есть в TextBox в...


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

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru