Имя: Пароль:
1C
1С v8
Подскажите как из 1с в Word и OpenOffice Writer найти стоки вида [любой_текст]
0 kn
 
05.02.14
22:07
т.е все стоки которые в [], подскажите какие функции использовать
1 Torquader
 
05.02.14
22:11
В Word есть механизм поиска, а в OO - текстовый курсор с поиском.
И по тому и по другому есть описание встроенных функций и объектов, правда, только на английском языке.
2 spectre1978
 
05.02.14
22:12
(0) для Word и OOo механизмы будут совершенно разные.
3 kn
 
05.02.14
22:14
умею искать символ и там и там, а что дальше не знаю
4 kn
 
05.02.14
22:16
ну пусть дальше нужно считать слово без пробелов, кто-нибудь может подсказать как
5 spectre1978
 
05.02.14
22:17
(3) в ворде можно заказать запись макроса, запустить поиск и посмотреть какой будет вызван метод. Затем вставить его себе в обработку. Как вызывать методы ООо через OLE - честно сказать, не знаю, но как-то понадобилось написать макрос под OOo Calc - все проклял, потому что дока была только на sun.com, только на английском и далеко не прозрачная. В конце концов сделал, но помахаться пришлось мама дорогая.
6 kn
 
05.02.14
22:18
макрос - это хорошо.
может кто скинет ссылку где есть описания функций openoffice
7 spectre1978
 
05.02.14
22:23
8 spectre1978
 
05.02.14
22:25
9 Torquader
 
05.02.14
22:36
(5) Там немного идеология другая, но потом начинаешь понимать, что это Word через одно место писан.
Например, в OO часто в функцию передаётся не несколько параметров, а один объект, атрибутами которого являются все нужные для исполнения параметры.
Просто, когда функцию вызываешь несколько раз с теми же параметрами - понимаешь, что не нужно ничего заново заполнять.
10 spectre1978
 
05.02.14
22:41
(9) я не против, просто документировано на тот момент было не особенно хорошо (2010). Возможно, сейчас ситуация с докой улучшилась, а тогда по своему вопросу удалось найти только что-то древнее, писанное, судя по всему, еще во времена StarOffice. Правда, все заработало как планировалось.
11 kn
 
06.02.14
10:46
для OpenOffice пробую так

ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager");
   Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop");

Свойства = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
Args = Новый COMSafeArray("VT_VARIANT", 1);
Свойства1 = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
Свойства1.Name = "Hidden";
Свойства1.Value = 0;
Args.SetValue(0,Свойства1);

    
Doc = Desktop.LoadComponentFromURL(ПривестиФайлКУРЛ(ФайлШаблона), "_blank", 0, Args);

SearchDesc = Doc.CreateSearchDescriptor();
SearchDesc.SearchString = "[";
  
SearchDesc1 = Doc.CreateSearchDescriptor();
SearchDesc1.SearchString = "]";
  
Found = Doc.FindFirst(SearchDesc);
Found1 = Doc.FindFirst(SearchDesc1);
  
Пока Found <> Неопределено Цикл
       Found = Doc.FindNext(Found.End, SearchDesc);
       Found1 = Doc.FindNext(Found1.End, SearchDesc1);
       НачПоз = Found.End;
       КонПоз = Found1.End;
       //вот здесь надо как-то считать текст между НачПоз и КонПоз, не пойму как и это comобъекты
КонецЦикла;
12 Torquader
 
06.02.14
11:05
(11) Там есть SearchRegularExpression, которое будучи поставленным в true позволяет использовать регулярные выражения.
Соответственно, в выражении нужно написать \[[^\[\]]{1,}\] или что-то подобное.

https://wiki.openoffice.org/wiki/Documentation/How_Tos/Regular_Expressions_in_Writer
13 kn
 
06.02.14
11:46
да, так должно получиться, только нужно получить тексты и положить их в списокзначений для дальнейшей обработки,как получить текст пробую
Found.Text но это comобъект, как до самих выражений [любой_текст] добраться?
14 kn
 
06.02.14
13:04
Спасибо,получилось(строку получить Found.String),осталось для Word
15 AquaKosh
 
06.02.14
13:22
Один из возможных вариантов для MS Word:


// Получаем все параметры из шаблона договора и приложений.
Состояние("Получение параметров из шаблона договора...");
СтруктураПараметров = Новый Структура();
// Юзаем wildcards - кастратный :) аналог регулярных выражений, но для наших текущих нужд канает.
MyRange = MSWord.ActiveDocument.Range();
MyRange.Find.Text = "\[*\]";
MyRange.Find.MatchWildcards = Истина;
Отказ = Ложь;
Пока MyRange.Find.Execute() = Истина Цикл
    ОбработкаПрерыванияПользователя();
    Ключ = MyRange.Text;
    Ключ = СтрЗаменить(Ключ, "[", "");
    Ключ = СтрЗаменить(Ключ, "]", "");
    Попытка
        СтруктураПараметров.Вставить(Ключ, "");
    Исключение
        Сообщить("В шаблоне договора найден недопустимый параметр: " + Ключ, СтатусСообщения.Важное);
        Отказ = Истина;
    КонецПопытки;
КонецЦикла;


Сами параметры в вордовском файле заключены в квадратные скобки.
16 kn
 
06.02.14
14:00
Спасибо, для Word заработало!
17 stran06
 
23.02.14
17:52
Убираешь нафиг квадратные скобки. То, что нужно искать, просто выделяешь цветом, оно удобней и наглядней.
Втыкаешь такой код
    Find = ООДок.CreateReplaceDescriptor();
    Find.SearchString="";
    Ar=Новый COMSafeArray("VT_VARIANT",1);
    Par=Find.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
    Par.Name = "CharBackColor";
    Par.Value = 16777113;
И будет тебе щастя :)
Подробней выложил в КЗ, только уже потерял.