Форум программистов, компьютерный форум, киберфорум
HCL Notes: Программирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/68: Рейтинг темы: голосов - 68, средняя оценка - 4.81
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252

"тонкости" работы с поиском Msword

25.10.2010, 14:42. Показов 12503. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
история началась с того, что поля ворда неудобны для массового применения (программной подстановки)
было решено заменить их шаблонами текста, например:
<Field1|default value|description[example]>
т.е. вместо поля вставляется такая конструкция
в нотуса это заносится в виде дока (могут быть варианты) с полями:
name value comments (где каменты включают часть description[example])
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">"код для получения "полей" ворда"</div></div><div class="sp-body"><div class="sp-content">

LotusScript
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
получение списка "шаблонов" (слов для замены) из ворд документа
результат в textList (ключ в хэше)
Function GetListByTemplate(worddoc As Variant, template As String, textlist List As String) As Boolean
Erase textlist
On Error Goto ErrorHandler
Dim wObj As Variant
Dim rngToSearch As Variant
Dim rngResult As Variant
Dim i As Integer
Dim s As String
 
Set wObj = worddoc.Application
Set rngToSearch = worddoc.Content
Set rngResult = rngToSearch.Duplicate
.Text = ""
rngResult.Find.Text = template возможный вариант: "\<*\>"
rngResult.Find.Forward = True
rngResult.Find.Wrap = wdFindStop
rngResult.Find.MatchCase = False
rngResult.Find.MatchWildcards = True
Do While rngResult.Find.Execute()
i = i + 1
rngResult.Select
s = worddoc.Application.Selection.Text
rngResult.Collapse 0 wdCollapseEnd
textList(s)=""
Loop
Print "Occurance in Word document" & template & " #" & Cstr(i)
GetListByTemplate=True
ExitFunctoin:
Exit Function
ErrorHandler:
Call RaiseError()
Erase textlist
Resume ExitFunctoin
End Function
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">"код для замены"</div></div><div class="sp-body"><div class="sp-content">

LotusScript
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
замена "шаблонов" (ключевых слов) в документе ворда, на значения из списка
ключ хэша - "шаблон", значение - замена
Function ReplaceByTemplate(replacementList List As String, worddoc As Variant) As Boolean
On Error Goto ErrorHandler
Dim wObj As Variant
Dim rngToSearch As Variant
Dim rngResult As Variant
Dim i As Long
Dim s As String, txt As String
 
Set wObj = worddoc.Application
Set rngToSearch = worddoc.Content
Forall m In replacementList
Set rngResult = rngToSearch.Duplicate
s=defDelim.GetEscLeft() & Listtag(m) & defDelim.GetEscRight()
s={\<} & Listtag(m) & {\>}
s=Listtag(m)
rngResult.Find.Text = s
rngResult.Find.Forward = True
rngResult.Find.Wrap = wdFindStop
не действует MachCase=False для шаблона \<fld_name\>
rngResult.Find.MatchCase = FalseMSWord - индусское поделие
rngResult.Find.MatchWholeWord = False
rngResult.Find.MatchWildcards = True
txt=Cstr(m)
rngResult.Find.Replacement.Text=txt
rngResult.Find.Execute ,,,,,,,,,,wdReplaceAll
i=i+1
DbgMsg({Значение:} & Listtag(m) & ", #" & Cstr(i))
End Forall
 
ReplaceByTemplate=True
ExitFunctoin:
Exit Function
ErrorHandler:
Call RaiseError()
Print {#} & Format(i, {000000}) & {;replace value>} & s & {;by value>} & txt
Resume ExitFunctoin
End Function
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">"а вот далее начинаются нюанецы, кот. описаны мною в каментах"</div></div><div class="sp-body"><div class="sp-content">

LotusScript
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
...................
Dim templList List As String
Call GetListByTemplate(worddoc, search, templList)
Forall m In templList
Dim doc As NotesDocument
Dim rec As Variant
Dim pattern As String
pattern=Listtag(m)
pattern=Mid(pattern,2,Len(pattern)-2) отрезаем делимитеры (предполагается 1-ин символ)
rec=Split(pattern,FLDREC_SEP) сплит на имя|значение|каменты
Dim org As String
org=rec(0)
rec(0)=Trim(org) убираем граничные пробелы
с пробелами (в названиях "полей") - полюбасу траблы
лучше отобразить (чтобы потом исправить)
 
Dim stmp As String, sUtrim As String
sUtrim=Ucase(Trim(rec(0))) для перезаписи полей
 
этот блок для борьбы с реализацией программного поиска в Word
 
для последующей "нормализации" в Word документе
вариант точного соответствия
Ucase для обхода глюка ворда - не действует MachCase=False для шаблона \<fld_name\>, д.б. точное соответ.
stmp=defDelim.GetEscLeft & defDelim.GetEscaped(pattern) & defDelim.GetEscRight
но - этот поиск не будет работать (по точному соответствию), если фраза разносится на несколько строк
"спасибо" индусам (нирвана им в анус)
recreplace(stmp)=defDelim.GetLeft & sUtrim & defDelim.GetRight
 
поэтому делаем ЕЩЁ и вариант с wildcard
recreplace(defDelim.GetEscLeft & org & FLDREC_SEP & {*} & defDelim.GetEscRight)=_
defDelim.GetLeft & sUtrim & defDelim.GetRight
ниже - можно (впринципе) не делать, если прдыдущее не помогло, это тоже не спасёт;)
recreplace(defDelim.GetEscLeft & org & defDelim.GetEscRight)=_
defDelim.GetLeft & Ucase(rec(0)) & defDelim.GetRight
 
..........................
End Forall
..........................
Call ReplaceByTemplate(recreplace, worddoc)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.10.2010, 14:42
Ответы с готовыми решениями:

тонкости работы с реестром
есть програма которая по нажатию кнопки творит вот такое чудо void __fastcall TForm1::Button2Click(TObject *Sender) { ...

Тонкости работы с vararg
Думается, многим будет полезно попробовать разобраться с одной проблемой. С одной стороны не наступить на эти грабли в будущем, с другой...

Тонкости работы ползунков
Я обрабатываю следующие сообщения: if(nSBCode == SB_THUMBPOSITION || nSBCode == SB_THUMBTRACK || nSBCode == SB_PAGERIGHT || nSBCode...

4
0 / 0 / 0
Регистрация: 18.08.2008
Сообщений: 1,698
25.10.2010, 19:21
Я плюнул на MS Office. И пытаюсь писать под Symphony.
Вот пример отчета по шаблону
Посмотреть вложение PurchaseOrder.rar
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
25.10.2010, 20:20
яб тоже плюнул (и плюну), но у нас корпоративная любовь к МС продуктам ;) (и согласование текста делают через ... = МСО)
а плюну след. образом - буду втягивать текст контрактов в нотусню
а потом -> PDF
но это мои мечты ;) - а времени нет
0
0 / 0 / 0
Регистрация: 18.08.2008
Сообщений: 1,698
26.10.2010, 11:26
Цитата Сообщение от lmike
яб тоже плюнул (и плюну), но у нас корпоративная любовь к МС продуктам ;) (и согласование текста делают через ... = МСО)
а плюну след. образом - буду втягивать текст контрактов в нотусню
а потом -> PDF
но это мои мечты ;) - а времени нет
Вот
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
26.10.2010, 12:45
это слишком "простой" ПДФ ;)
надо более продвинутый вариант делать
схема уже оглашалась... notesdoc->DXL->SAX+FOP->PDF
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.10.2010, 12:45
Помогаю со студенческими работами здесь

Библиотека для работы с MsWord файлами
Добрый день. Люди подскажите, есть какая нибудь библиотека для работы с MsWord файлами? заранее пасиб.

Тонкости работы многозадачной системы на однопроцессорной машине
Вопросы, появившиеся после прочтения статьи Evg &quot;Потоки vs процессы&quot;. Там и системы с несколькими физическими процессорами, и системы...

Разрешение работы поля с поиском на заблокированной форме
Доброго всем дня! Суть проблемы: При загрузке формы средствами VBA запрещено редактирование, удаление, добавление записей. На этой же...

Метод сетевого планирования, ошибки с поиском ранга работы
Здравствуйте уважаемые форумчане!) Возникла проблема с лабой по предмету исследование операций. Тема &quot;Сетевое планирование...

Работа с MsWord
Всем привет! Нужна помощь с лабой. Задача: Дан документ Word, нужно найти пятое слово и надругаться над ним. По лекциям у меня получилось...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru