|
v7: работа с word через ole | ☑ | ||
---|---|---|---|---|
0
ksa-nsk
06.12.17
✎
22:33
|
Всех приветствую. Надо найти в абзаце ворда слово, от него выделить до начала абзаца и заменить текст.
Слово нахожу, его выделяю, дальше затык, не могу передать параметры. Если нажимать кнопками, контрол+шифт+стрелкаВверх, в макросе: Selection.MoveUp Unit:=wdParagraph, :=1, Extend:=wdExtend Word = СоздатьОбъект("Word.Application"); Word.Visible = 1; Word.ActiveDocument.Select(); Word.Selection.Find.Text = "тест"; Если Word.Selection.Find.Execute() <> 0 Тогда Word.Selection.ExtendMode = 1; // указываем на выделение текста Word.Selection.MoveUp(); // сама команда Иначе Предупреждение("ERROR> ", 2); КонецЕсли; Судя по макросу, параметр Extend:=wdExtend я вроде как указал, а вот как остальные (Unit и Count) - затык. пробовал типа Word.Selection.MoveUp(1, 1, 1); тоже облом(( может, кто сталкивался, поделитесь. В интернете ничего не нашел((( |
|||
1
Скиурус
06.12.17
✎
23:32
|
Не надо хренью страдать с селекшенами и файндами, надо как-то так:
|
|||
2
ksa-nsk
07.12.17
✎
07:42
|
Спасибо за подсказку, на семерку перложить не смог, решил простыми подменами, типа
Fnd = Word.ActiveDocument.Range().Find; Fnd.ClearFormatting(); Fnd.Forward = -1; Fnd.Execute("Устава",,,,,,,, , СтрокаОснование,2); |
|||
3
Масянька
07.12.17
✎
08:51
|
(2) А чем не страивает обычные параметры (в [], например) и их замена?
|
|||
4
ksa-nsk
07.12.17
✎
09:12
|
(2) прошу привести пример, только в варианте 1с ))
|
|||
5
Масянька
07.12.17
✎
09:13
|
(4) Договор - шаблон Word.
// формируем файл мWord = СоздатьОбъект("Word.Application"); мWord.Visible = 0; мNewDoc = мWord.Documents; мШаблон = СокрЛП(Строка(КаталогШаблонов + мШаблон)); мДок = мNewDoc.Add(мШаблон, 0, 0, 1); // верхний колонтитул мКолонтитул = мДок.Sections.Item(1).Headers.Item(1).Range; мКолонтитул.Find.Execute("[ПечНомерДоговора]", 0,0,,,,,,,мНомерДоговора,2); мКолонтитул.Find.Execute("[ПечДатаДоговора]", 0,0,,,,,,,Нрег(СокрЛП(мДатаДоговора)),2); мОбъект = мДок.Content; // подставляем значения по тексту договора - признак замены [] мОбъект.Find.Execute("[ПечНомерДоговора]", 0, 0,,,,,,, мНомерДоговора,2); мОбъект.Find.Execute("[ПечДатаДоговора]", 0, 0,,,,,,, Нрег(СокрЛП(мДатаДоговора)),2); мОбъект.Find.Execute("[ПечПокупатель]", 0, 0,,,,,,, СокрЛП(мПокупатель),2); мОбъект.Find.Execute("[ПечРуководитель]", 0, 0,,,,,,, мПечОтветственноеЛицо,2); мОбъект.Find.Execute("[ПечОснование]", 0, 0,,,,,,, СокрЛП(мОснование),2); мОбъект.Find.Execute("[УчетФЗ44]", 0, 0,,,,,,, СокрЛП(ПоФЗ44),2); Ну, и далее... |
|||
6
Масянька
07.12.17
✎
09:14
|
+ (5) [ПечНомерДоговора] и пр. - это и есть параметры, которые заполняются.
|
|||
7
ksa-nsk
07.12.17
✎
09:45
|
(5) - примерно так и сделал, просто сначала хотел найти слово в абзаце, потом от этого слова к началу абзаца все выделить и другой текст воткнуть. На клавиатуре это легко - контрол+шифт+стрелкаВверх. В макросе ода строка))). Затык только в передаче параметров в команду MoveUp()
|
|||
8
Масянька
07.12.17
✎
09:47
|
(7) Ну, так сделай "от слова к началу абзаца" параметром и, в зависимости от условий (или чего там) - меняй.
|
|||
9
ksa-nsk
07.12.17
✎
10:00
|
(8) я ж говорю - там надо 3 параметра хитрозадо передать, нигде не нашел, как.
В общем ладно, проблему решил, но все же потом еще помучаю ворд, из спортивного интереса. Всем спасибо за отзывчивость |
|||
10
Масянька
07.12.17
✎
10:01
|
(9) Ну, опищи свои три параметра - что есть, на что заменить.
|
|||
11
ksa-nsk
07.12.17
✎
11:25
|
(10) хорошо, в 1м посте вроде указал:
макрос выглядит Selection.MoveUp Unit:=wdParagraph, :=1, Extend:=wdExtend т.е. первый параметр Unit, там типа по строке, по абзацу... второй типа Count наверно, здесь =1, это количество третий Extend - это указание что это выделение. Selection.MoveUp(1, 1, 1) не проходит, Selection.MoveUp(1, 0, 1) - со вторым нулем всегда возвращает ноль, т.е. что-то пытается сделать Если перед этим сделать Word.Selection.ExtendMode = 1; а потом Selection.MoveUp(); то выделится вверх ровно одна строка, но не до начала абзаца, т.е. не передан параметр Unit муторное это дело из 1с рулить вордом, зато если получится, настроение потом хорошее)) |
|||
12
Масянька
07.12.17
✎
11:34
|
(11) Ты не понял...
Опиши задачу: например, есть абзац "[ПечПокупатель], именуемый в дальнейшем Заказчик, в лице [ПечРуководитель], действующего на основании [ПечОснование], с одной стороны и Общество с ограниченной ответственностью «Моё», именуемый в дальнейшем Исполнитель, в лице директора Меня, действующего на основании Ус¬тава, с другой стороны [УчетФЗ44] заключили договор о нижеследующем:", где [УчетФЗ44] - нужно заполнить "в соответствии с....", если нужно. Ну, примерно как-то так. Вполне вероятно, что можно обойтись малой кровью. |
|||
13
ksa-nsk
07.12.17
✎
11:51
|
(12) да в принципе подменами решил, как ты и предложил, просто хотел в код засунуть типа макроса, только через 1с. Одна строка - красиво и быстро.
А так я хотел типа в твоем примере найти, например, слово "Меня", выделить от начала абзаца до этого слова и вместо этого выделения воткнуть другой текст))). Слово нахожу, выделяю, а вот сделать а-ля контрол+шифт+СтрелкаВверх - фиг вам. |
|||
14
Масянька
07.12.17
✎
11:56
|
(13) В примере("[ПечПокупатель], именуемый в дальнейшем Заказчик, в лице [ПечРуководитель], действующего на основании [ПечОснование], с одной стороны и Общество с ограниченной ответственностью «Моё», именуемый в дальнейшем Исполнитель, в лице директора Меня, действующего на основании Ус¬тава, с другой стороны [УчетФЗ44] заключили договор о нижеследующем:") меняешь "[ЗаменаКускаАбзаца], действующего на основании Ус¬тава, с другой стороны [УчетФЗ44] заключили договор о нижеследующем:", в коде:
если меняем то [ЗаменаКускаАбзаца] = ПечПокупатель + ", именуемый в дальнейшем Заказчик, в лице " + ПечРуководитель" + ", действующего на основании " + ПечОснование + ", с одной стороны и Общество с ограниченной ответственностью «Моё», именуемый в дальнейшем Исполнитель, в лице директора Меня". |
|||
15
dk
07.12.17
✎
12:06
|
Закладки рулят
Find.Execute - в топку |
|||
16
ksa-nsk
07.12.17
✎
12:13
|
О! допинал))), мало ли, кому сгодится
Word.ActiveDocument.Select(); Word.Selection.Find.Text = СловоВхода; Если Word.Selection.Find.Execute() <> 0 Тогда // нашли Word.Selection.ExtendMode = 1; Word.Selection.MoveUp(4); ну и далее замена... парметр нашел на http://scriptcoding.ru/2013/12/30/word-vba-selection-metody-1/ |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |