Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/43: Рейтинг темы: голосов - 43, средняя оценка - 4.88
2 / 2 / 0
Регистрация: 11.01.2013
Сообщений: 260

Word и mergefield

14.03.2016, 20:52. Показов 8895. Ответов 50
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В базе данных Access есть таблица, в одном из полей которой хранится имя поля шаблона word, в которое должны выводиться данные. Как запрограммировать подстановку данных в это поле?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.03.2016, 20:52
Ответы с готовыми решениями:

Word. BDE. Вставка при открытии, mergefield
Форумчане! Не могу уже как полгода понять одну очень важную тему. В документ Word выгружаются из БД данные, БД на BDE. Не могу вообще...

Настройка MERGEFIELD
Предысторию опускаю.) Не получается получить результат для такого вот синтаксиса кода поля: { MERGEFIELD "Название_поля_даты"...

Есть ли ограничение на количество полей MergeField
Добрый день! Добавляю поля типа MergeField и начиная с 66 поля, поле №65 и 66, и последующие склеиваются между собой. Получается больше 65...

50
Модератор
Эксперт MS Access
 Аватар для shanemac51
12215 / 5058 / 812
Регистрация: 07.08.2010
Сообщений: 14,917
Записей в блоге: 4
14.03.2016, 21:11
Цитата Сообщение от hawk1 Посмотреть сообщение
В базе данных Access есть таблица, в одном из полей которой хранится имя поля шаблона word, в которое должны выводиться данные. Как запрограммировать подстановку данных в это поле?
Видела более 6 вариантов вывода инфы в шаблон WORD, но вашего не видела
может поясните, что вы хотите получить и откуда(что является основой --ВОРД или АКСЕСС)

-------
открывается аксесс и запускается функция для заполнения шаблона ворд
или открывается ворд и вызывается вордовский макрос(или слияние)
0
2 / 2 / 0
Регистрация: 11.01.2013
Сообщений: 260
14.03.2016, 21:16  [ТС]
На форме аксесс есть кнопка нажимаем ее, открывается шаблон ворд и заполняется данными.
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12215 / 5058 / 812
Регистрация: 07.08.2010
Сообщений: 14,917
Записей в блоге: 4
14.03.2016, 21:17
может примерный шаблон ворда выложите и какие поля там заполнять надо
0
2 / 2 / 0
Регистрация: 11.01.2013
Сообщений: 260
14.03.2016, 21:46  [ТС]
Проблема в чем. Объектная модель ворда позволят обращаться к полям только по индексу. Нам индексы неизвестны, нам известны имена полей.
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12215 / 5058 / 812
Регистрация: 07.08.2010
Сообщений: 14,917
Записей в блоге: 4
14.03.2016, 21:54
Лучший ответ Сообщение было отмечено Eugene-LS как решение

Решение

я применяю не поля/закладки, а слова замены и небольшой модуль замены типа
======================================== ====
договор(номДог) от (датаДог)

заключен между (фирма1) в лице(лицо1род) (фио1род) и (фирмой2) в лице(лицо2род) (фио2род)................
======================================== =====
-слова замены могут повторяться по шаблону любое количество раз ии 0 до ххх, возможно можно сделать и вложенные)

и блоком замены типа
Visual Basic
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
Option Compare Database
Option Explicit
'On Error GoTo Err_
Dim app As Object
 
 
Function funOutputWord140305(strPathDot As String, strPathWord As String) As Boolean
Debug.Print strPathDot
Debug.Print strPathWord
Dim DlgUser As Integer
    If Dir(strPathWord) <> "" Then
        DlgUser = MsgBox("Документ с таким именем ранее уже был создан. Заменить его?", vbYesNo, "admin")
        If DlgUser = vbNo Then
            Set app = CreateObject("Word.Application")
            With app
                .Visible = True
                .Documents.Open strPathWord
            End With
            Set app = Nothing
        Else
            GoTo nn
        End If
    Else
nn:
        Set app = CreateObject("Word.Application")
        app.Visible = True
        app.Documents.Add strPathDot
        
        With app.ActiveDocument
        
        mrepl "[НазваниеОрганизации]", Название_Организации
        mrepl "[КраткоеНазвание]", Краткое_Название
        mrepl "[ФИО]", ФИО
        mrepl "[ИОФ]", ИО_Фамилия
        mrepl "[Должность]", Должность
        mrepl "[ДействуетНаОсновании]", Действует_На_Основании
        mrepl "[АдресЮридический]", Адрес_юридический
        mrepl "[АдресПочтовый]", Адрес_почтовый
        mrepl "[ИНН]", ИНН
        mrepl "[КПП]", КПП
        mrepl "[ОГРН]", ОГРН
        mrepl "[РС]", Расчетный_счет
        mrepl "[Банк]", Банк
        mrepl "[НомерДоговора]", НомерДоговора
        mrepl "[ДолжностьРП]", ДолжностьРП
        
        .SaveAs Replace(strPathWord, """", "'")
        End With
        app.Activate
        Set app = Nothing
    End If
    funOutputWord140305 = True
Exit_:
    Exit Function
Err_:
    funOutputWord140305 = False
    Err.Clear
    app.Quit
    Resume Exit_
End Function
Sub mrepl(n1z, n2z)
app.Selection.Find.ClearFormatting
app.Selection.Find.Replacement.ClearFormatting
With app.Selection.Find
 
.Text = n1z
.Replacement.Text = "" & n2z
app.Selection.Find.Execute Replace:=2
''2-wdReplaceAll
 
End With
 
'app.Selection.Find.Execute Replace:=wdReplaceAll
End Sub
3
547 / 274 / 50
Регистрация: 03.04.2015
Сообщений: 926
14.03.2016, 22:42
Цитата Сообщение от hawk1 Посмотреть сообщение
Объектная модель ворда позволят обращаться к полям только по индексу
Неверное утверждение, непонятно на чём основанное.
Строка из работающего кода:
Visual Basic
1
.Documents(wDoc).SelectContentControlsByTitle("CountDays").Item(1).Range.Text = rst!AddDays
Добавлено через 7 минут
также работает и с закладками
Visual Basic
1
.Bookmarks("закладка").Range.Text = "текст"
0
2 / 2 / 0
Регистрация: 11.01.2013
Сообщений: 260
15.03.2016, 09:28  [ТС]
Visual Basic
1
2
3
4
5
      If (iStatus = 10) Or (iStatus = 25) Then
         objWord.ActiveDocument.SelectContentControlsByTitle(sReportMergeField).Item(1).Range.Text = sHeadline1 & vbNewLine & sText2
      Else
         objWord.ActiveDocument.SelectContentControlsByTitle(sReportMergeField).Item(1).Range.Text = sHeadline2 & vbNewLine & sText2
      End If
Запрашиваемый номер семейства не существует.
Вложения
Тип файла: rar База.rar (339.9 Кб, 45 просмотров)
0
547 / 274 / 50
Регистрация: 03.04.2015
Сообщений: 926
15.03.2016, 13:00
Да, невнимательно прочитал задачу. У вас именно поля сделаны. Но, похоже, что это не совсем то, что вам нужно.
Судя по коду, вы из рекордсета заполняете шаблон Word. Поля предназначены не совсем для этого. MERGEFIELD { MERGEFIELD ИмяПоля } вставляет в основной документ ссылку на поле данных. Для вашей задачи надо бы использовать либо закладки, либо элементы управления содержимым.
0
0 / 0 / 0
Регистрация: 20.09.2018
Сообщений: 7
17.10.2018, 16:37
Галина здравствуйте. Попробовал ваши примеры с полями подстановки все отлично работает. Как задать значение на поле из другой формы тоже разобрался. Не могу разобраться как написать значение на поле которое должно подставляться в зависимости от другого значения поля. Для примера имеется подчиненная форма где указывается номер договора, статус лица, ФИО, номер телефона. Из основной формы с помощью кнопки идет подстановка данных в документ WORD также должно подставляться данные из поля подчиненной формы "телефон" соответствующее отбору статус = собственник. Возможно ли это сделать? подскажите как.
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12215 / 5058 / 812
Регистрация: 07.08.2010
Сообщений: 14,917
Записей в блоге: 4
17.10.2018, 16:42
Цитата Сообщение от Aleksgal Посмотреть сообщение
Возможно ли это сделать?
возможно многое, но удобнее это решать , видя живую базу с формами и шаблоны ворда
0
Эксперт MS Access
 Аватар для Eugene-LS
11756 / 5818 / 1490
Регистрация: 05.10.2016
Сообщений: 16,390
17.10.2018, 18:52
Цитата Сообщение от shanemac51 Посмотреть сообщение
я применяю не поля/закладки, а слова замены и небольшой модуль замены типа
Спасибо!
Код забрал в копилку ....
0
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,375
18.10.2018, 02:59
Этот топик нужно разместить в Путеводителе по форуму, разделе Excel:
Word и mergefield
0
296 / 257 / 68
Регистрация: 18.06.2015
Сообщений: 570
18.10.2018, 07:16
По мне так гораздо эффективнее использовать поля для mailmegre и мерджить с базой напрямую встроенным механизмом Ворда, чем хардкодить замены. А если там сотня полей? А если нужно размножить документ по числу строк в звпросе?
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12215 / 5058 / 812
Регистрация: 07.08.2010
Сообщений: 14,917
Записей в блоге: 4
18.10.2018, 08:09
Цитата Сообщение от MrShin Посмотреть сообщение
По мне так гораздо эффективнее использовать поля для mailmegre и мерджить с базой напрямую встроенным механизмом Ворда, чем хардкодить замены.
естественно, если вам надо сформировать сотню-другую приглашений на свадьбу, находясь в ВОРД

договора/акты/соглашения... как правило штучный товар с повторением (многократным) одних и тех же полей, расчетов типа сумма прописью, выводом полей по условию, иногда таблиц, картинок,мемо-полей и т.д.

забыла ,кстати, что часто формируется пакет документов с однотипными заменами(договор+акт+приложение+...)

как то я насчитала 10 способов вывода данных их таблиц в ворд
может что-то и забыла

Добавлено через 14 минут
кстати, более всего меня раздражает в слиянии жесткая привязка шаблона WORD к таблице с данными, а лазить по файловой системе, ища нужный файл я невзлюбила с первого года работы программистом
0
296 / 257 / 68
Регистрация: 18.06.2015
Сообщений: 570
18.10.2018, 09:22
Цитата Сообщение от shanemac51 Посмотреть сообщение
естественно, если вам надо сформировать сотню-другую приглашений на свадьбу, находясь в ВОРД
Ну не только. Ниже приведен код из акцессовского приложения для американского исправительного учреждения, где на каждого "пациента" заполняются десятки форм с кучей повторяющихся полей с условиями, суммами прописью и т.п., при этом документы разнотипные. Все вычисления нужно сделать в запросе для рекордсета. Не может заполнять таблицы и картинки, это нужно уже хардкодить, особенно таблицы.
Цитата Сообщение от shanemac51 Посмотреть сообщение
кстати, более всего меня раздражает в слиянии жесткая привязка шаблона WORD к таблице с данными
Для данного кода не требуется наличия источника данных в вордовом документе совсем, нужны только поля. Просто копируются как обычный текст из любого другого файла или вставляются штатным способом и переименовываются. Источник данных формируется программно.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
' формируем имя временного файла, который будет мерджиться с документом
strMailmergeDataFilename = GetTempPath() & Year(Date) & "_" & Month(Date) & "_" & Day(Date) & "_" & Hour(Now) & "_" & Minute(Now) & "_" & Second(Now) & Round(Rnd * 100) & ".txt"
 
' создаем временный CSV файл из запроса
DoCmd.TransferText acExportDelim, , gstrQUERYNAME, strMailmergeDataFilename, True
 
Set objWordDoc = GetObject(strTemplateFile, "Word.Document")
Set appWord = objWordDoc.Application
appWord.Visible = True
 
' создаем источник
objWordDoc.MailMerge.OpenDataSource _
    Name:=strMailmergeDataFilename, ConfirmConversions:=False, _
    ReadOnly:=False, LinkToSource:=True, AddToRecentFiles:=False, _
    PasswordDocument:="", PasswordTemplate:="", WritePasswordDocument:="", _
    WritePasswordTemplate:="", Revert:=False, Format:=0, _
    Connection:="", SQLStatement:="", SQLStatement1:=""
objWordDoc.MailMerge.Destination = wdSendToNewDocument
' мерджим данные
objWordDoc.MailMerge.Execute
Set objWordDocMerged = appWord.ActiveDocument
objWordDoc.MailMerge.DataSource.Close
objWordDoc.Save
objWordDoc.Close SaveChanges:=-1 '-1 = wdSaveChanges
Т.е. ворд не обращается к Акцессу напрямую, а получает данные из временного CSV файла с данными.
1
Модератор
Эксперт MS Access
 Аватар для shanemac51
12215 / 5058 / 812
Регистрация: 07.08.2010
Сообщений: 14,917
Записей в блоге: 4
18.10.2018, 09:35
Цитата Сообщение от MrShin Посмотреть сообщение
формируем имя временного файла, который будет мерджиться с документом
11-й вариант заполнения вордовского шаблона
фантазия авторов -безгранична
0
296 / 257 / 68
Регистрация: 18.06.2015
Сообщений: 570
18.10.2018, 10:22
Цитата Сообщение от shanemac51 Посмотреть сообщение
11-й вариант заполнения вордовского шаблона
Интересно посмотреть на полный список вариантов.
В этом топике:
1. Менять программно поля
2. Менять букмарки
3. Менять текстовые шаблоны
4. Мерджить программно сформированный CSV файл.

Другие варианты:
5. Хардкодить источник данных в вордовый темплейт и мерджить программно из Акцесса
6. Программно создавать содержимое в Ворде из Акцесса

Что еще можно добавить?
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12215 / 5058 / 812
Регистрация: 07.08.2010
Сообщений: 14,917
Записей в блоге: 4
18.10.2018, 10:30
сейчас не могу точно вспомнить , но насчет 10 --не придумываю
7--создавать программно RTF или HTM,которые легко открываются в ВОРД
8--экспорт готовых отчетов из ексель/аксесс
9--
10-
1
0 / 0 / 0
Регистрация: 20.09.2018
Сообщений: 7
19.10.2018, 08:41
Здравствуйте Галина. Выкладываю свой проект. Основная форма "Квартиры" в ней две вкладки "Договора" и "Представители"
Из форм квартиры и договора данные передаются в WORD, как из формы "представители" передавать данные поля "сотовый телефон" в соответствии с данными другого поля "статус"=собственник
Вложения
Тип файла: rar Клиент.rar (353.5 Кб, 33 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.10.2018, 08:41
Помогаю со студенческими работами здесь

Word.Application. Взаимодействие с word. Добавить общие шаблоны *.dot в папку appdata и в word
Добрый день! Подскажите, пожалуйста, возможно ли средствами делфи активировать кнопку &quot;Добавить&quot; (ниже поясняющие скрины) и...

Проблема с $word=new COM("word.application") or die("Couldn ''t start Word!");
Наблюдаю такую штуку - создаю объект Word $word=new COM(&quot;word.application&quot;) or die(&quot;Couldn ''t start Word!&quot;);выполяню всякие там приблуды...

Макрос Word 2016 замена шрифта рандомных символов на выбранный - MS Word
Есть обычный текст, только буквы и цифры Нужно, чтобы после обработки макроса выбирались случайные символы (примерно четверть от общего...

Работа метода Word.Selection.Find при поиске в документе Word
Дорого времени суток! никак не могу разобраться в механизме работы range.find Запускаю: ......................... ...

Нарушение форматирования документов word 2010 при открытии в word 2013
Здравия коллеги! Столкнулся с такой проблемой у человека W8+office2013 всё легальное, документы от офиса 2010 криво открываются, все!...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru