Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: работа с word через ole

v7: работа с word через ole
Я
   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
Не надо хренью страдать с селекшенами и файндами, надо как-то так:


КлючевоеСлово = "тест";
Ренж = Word.ActiveDocument.Content;
Для Каждого Абзац Из Ренж.Paragraphs
    й = 1;
    Пока й < Абзац.Range.Words.Count И СокрП(Абзац.Range.Words(й).Text) <> КлючевоеСлово
        й = й + 1;
    КонецЦикла;
        
    Текст = ""
    Для й = й + 1 По Абзац.Range.Words.Count
        Текст = Текст + Абзац.Range.Words(i).Text
    КонецЦикла;
        
    Если Текст <> "" Тогда
        Абзац.Range.Text = "Текст для замены " + Текст;
    КонецЕсли;
КонецЦикла;


   ksa-nsk
 
2 - 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) А чем не страивает обычные параметры (в [], например) и их замена?
   ksa-nsk
 
4 - 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) [ПечНомерДоговора] и пр. - это и есть параметры, которые заполняются.
   ksa-nsk
 
7 - 07.12.17 - 09:45
(5) - примерно так и сделал, просто сначала хотел найти слово в абзаце, потом от этого слова к началу абзаца все выделить и другой текст воткнуть. На клавиатуре это легко - контрол+шифт+стрелкаВверх. В макросе ода строка))). Затык только в передаче параметров в команду MoveUp()
   Масянька
 
8 - 07.12.17 - 09:47
(7) Ну, так сделай "от слова к началу абзаца" параметром и, в зависимости от условий (или чего там) - меняй.
   ksa-nsk
 
9 - 07.12.17 - 10:00
(8) я ж говорю - там надо 3 параметра хитрозадо передать, нигде не нашел, как.
В общем ладно, проблему решил, но все же потом еще помучаю ворд, из спортивного интереса.

Всем спасибо за отзывчивость
   Масянька
 
10 - 07.12.17 - 10:01
(9) Ну, опищи свои три параметра - что есть, на что заменить.
 
 Рекламное место пустует
   ksa-nsk
 
11 - 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] - нужно заполнить "в соответствии с....", если нужно.
Ну, примерно как-то так.
Вполне вероятно, что можно обойтись малой кровью.
   ksa-nsk
 
13 - 07.12.17 - 11:51
(12) да в принципе подменами решил, как ты и предложил, просто хотел в код засунуть типа макроса, только через 1с. Одна строка - красиво и быстро.
А так я хотел типа в твоем примере найти, например, слово "Меня", выделить от начала абзаца до этого слова и вместо этого выделения воткнуть другой текст))). Слово нахожу, выделяю, а вот сделать а-ля контрол+шифт+СтрелкаВверх - фиг вам.
   Масянька
 
14 - 07.12.17 - 11:56
(13) В примере("[ПечПокупатель], именуемый в дальнейшем Заказчик, в лице [ПечРуководитель], действующего на основании [ПечОснование], с одной стороны и Общество с ограниченной ответственностью «Моё», именуемый в дальнейшем Исполнитель, в лице директора Меня, действующего на основании Ус¬тава, с другой стороны [УчетФЗ44] заключили договор о нижеследующем:") меняешь "[ЗаменаКускаАбзаца], действующего на основании Ус¬тава, с другой стороны [УчетФЗ44] заключили договор о нижеследующем:", в коде:
если меняем то [ЗаменаКускаАбзаца] = ПечПокупатель + ", именуемый в дальнейшем Заказчик, в лице " + ПечРуководитель" + ", действующего на основании " + ПечОснование + ", с одной стороны и Общество с ограниченной ответственностью «Моё», именуемый в дальнейшем Исполнитель, в лице директора Меня".
   dk
 
15 - 07.12.17 - 12:06
Закладки рулят
Find.Execute - в топку
   ksa-nsk
 
16 - 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/

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует