Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: ActiveX/СОМ/CORBA > Разрыв страницы в Word


Автор: Chpok 10.11.2006, 08:48
Привет!

Такая проблема, помогите;))

Открываю делфёй вордовский документ: каждую страницу надо записать в отдельный вордовский документ. Когда я говорю, каждую страницу, я имею в виду текст до разрыва страницы, он может быть и на пять страниц, и на 5 строчек.
Как это сделать?
В принципе проблема у меня: 
   1. как найти разрыв страницы;
   2. как "взять" весь текст между разрывами (подозреваю, что можно через characters);

Кто-нибудь, подскажите что-нибудь smile 

Автор: Matematik 10.11.2006, 10:53
1. Делай поиск спец символа "разрыв страницы" - "^m"
2. Выделяешь все от разрыва страницы до начала документа, вырезаешь, вставляешь в новый документ
3. goto 1


Автор: Chpok 11.11.2006, 11:27
спасибо, попробую.

Кстати, заодно спрошу: откуда вы все берёте эти спецсимволы? Где-то есть такой док?

Автор: Albinos_x 11.11.2006, 13:35
в большинстве случаев методом экпериментов... по крайней мере я... документации на Ворд я не нашёл...

Автор: Chpok 11.11.2006, 13:49
А как мне это всё выделить, я что-то не могу сообразить??

Вот так вот я наверное найду разрыв страницы:
Код

    tString:='^m'; // спецсимвол: разрыв страницы
    p1:=wdFindStop; // найти один раз
    p2:=wdReplaceNone;
    wd.Content.Find.Execute(tString,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,p1,EmptyParam,EmptyParam,p2,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
    wd.Content.Select;

...и после этого курсор стоит перед разрывом, да?
Как мне теперь выделить?? smile 

Автор: Albinos_x 11.11.2006, 16:00
Цитата(Chpok @  11.11.2006,  13:49 Найти цитируемый пост)
'^m'

это условный знак форматирования и так ты его не найдёшь...т.к. Word хранит его как символ #12, вот его-то тебе и нужно искать... это раз... а во вторых
Цитата(Chpok @  11.11.2006,  13:49 Найти цитируемый пост)
wd.Content.Select;

это выделит весь текст, а не искомый...

в третьих, если эта страница вставлена, не через команду -> вставка  -> разрыв  -> новую страницу, то этого символа в тексте не найдёшь...

Автор: Matematik 11.11.2006, 17:42
Берутся легко.
Делаешь соответствующий макрос и его код переносишь в Delphi (естественно с синтаксисом)
Код

 ' найти
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "^m"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute
' выделить
    Selection.HomeKey Unit:=wdStory, Extend:=wdExtend
' вырезать
    Selection.Cut

Автор: Albinos_x 11.11.2006, 18:28
Цитата(Matematik @  11.11.2006,  17:42 Найти цитируемый пост)
Берутся легко.

упс... у меня не находило... но оказалось, что это был глюк самого ворда... как я этот глюк убрал... всё стало находить без проблем...
Код
...
Templ:='^m';
D:=wdFindStop ;
WordApplication1.Selection.Find.Execute(Templ,EmptyParam,EmptyParam,EmptyParam,
                                        EmptyParam,EmptyParam,EmptyParam,D,EmptyParam,
                                        EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
...

находит и выделяет...

Автор: Chpok 15.11.2006, 06:55
Ага, начинаю понимать...

Написал следующее:
Код

    p1:='^m';
    p2:=wdFindStop;
    wa.Selection.Find.Execute(p1,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,p2,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);

    p1:=wdStory;
    p1:=wdExtend;
    wa.Selection.HomeKey(p1,p2);

    wa.Selection.Cut;

...только HomeKey ругается, говорит: "Неверный параметр"!!
Почему? smile 

И, вот ещё какой вопрос, у меня 
Код
wa
 - это TWordApplication, в нём открыто два документа, объект Selection - это курсор в том документе, который на данный момент является активным, так? smile 

Автор: Matematik 15.11.2006, 08:40
Цитата(Chpok @  15.11.2006,  06:55 Найти цитируемый пост)
HomeKey ругается, говорит: "Неверный параметр"!!

Опечатка
p2:=wdExtend;


Цитата(Chpok @  15.11.2006,  06:55 Найти цитируемый пост)
это TWordApplication, в нём открыто два документа, объект Selection - это курсор в том документе, который на данный момент является активным, так?

Точно не знаю, но я всегда активизурую нужный мне документ (doc.Activate) потом Selection указывает на него.

Автор: Chpok 15.11.2006, 08:54
Цитата

Опечатка
p2:=wdExtend;


Ой-ой-ой smile 
Прошу прощения за оплошность...

Автор: Albinos_x 15.11.2006, 14:41
Цитата(Chpok @  15.11.2006,  06:55 Найти цитируемый пост)
объект Selection - это курсор в том документе, который на данный момент является активным, так?  

это выделение. Если ничего не выделено, то оно находится в позиции курсора. А так это может быть картинка, кусок текста и т.д. и т. п.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)