|   |   | 
| 
 | 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/ | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |