Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.29;
Скачать: CL | DM;

Вниз

Строки в Word-е   Найти похожие ветки 

 
Tumcoat   (2003-09-15 04:30) [0]

Кто-нибудь, плиз, подскажите, как в Word-е, допустим в 10-ой строке символы с 5 по 10-ый сделать жирными?

Заранее спасибо.


 
mfender ©   (2003-09-15 05:16) [1]

Selection.HomeKey Unit:=wdStory
Selection.MoveDown Unit:=wdLine, Count:=10
Selection.MoveRight Unit:=wdCharacter, Count:=5
Selection.MoveRight Unit:=wdCharacter, Count:=5, Extend:=wdExtend
Selection.Font.Bold = wdToggle


Но тут же грабли: хорошо если это строки в понимании строки, т.е. ограниченные концом строки и находятся на этой строке. А ведь в ворде строка, которая не вмещается обычно переносится на следующую СТРОЧКУ. Так что тут вернее от абзаца плясать:

Selection.HomeKey Unit:=wdStory
Selection.MoveDown Unit:=wdParagraph, Count:=10
Selection.MoveRight Unit:=wdCharacter, Count:=5
Selection.MoveRight Unit:=wdCharacter, Count:=5, Extend:=wdExtend
Selection.Font.Bold = wdToggle


 
Tumcoat   (2003-09-15 05:38) [2]

Ладно, ставлю вопрос, по другому.

Есть код в Delphi5
Word:=CreateOleObject("Word.Application");
Word.Visible:=true;
Word.Documents.Add;

List:=Word.Documents.Item(1).Range;

List.Paragraphs.Item(1).Range.Text:="Заголовок";
List.Paragraphs.Add;
List.Paragraphs.Add;
List.Paragraphs.Item(3).Range.Text:="изменение символов в строке";


Вот как вот в этой 3-ей строке (или параграфе, один хрен одно и тоже :-)) ) слово "символов" выделить жирным, программно.

Есть такая функция:
WordDocument1.Range(a,b).Font.Bold:=1;
где a-номер символа "с"(первого), b-номер символа "в"(последнего), но что делать если я не знаю под каким номером будет этот символ?


 
mfender ©   (2003-09-15 06:09) [3]

Вот здрасьте вам.

WordDocument1.Range(Pos("символов","изменение символов в строке"),
Pos("символов","изменение символов в строке")+Length("символов")-1);

IMHO, так будет в этом частном случае. Может в количестве скобок ошибся. Попробуй.


 
Tumcoat   (2003-09-15 07:36) [4]

Ни фига не понял, ты уж извини чайника, но для меня это слишком сложно. Например, что ты подразумеваешь под этой строчкой Pos("символов","изменение символов в строке"
И что такое Pos("символов","изменение символов в строке")+Length("символов")-1?


 
mfender ©   (2003-09-15 07:49) [5]

Функция Pos ( Substr: string; S: string ): Integer;
Описание:
Функция находит подстроку Substr в строке S и возвращает ин-декс первого символа найденной подстроки. Если S не содержит указанную подстроку, то функция возвращает 0.


Т.е. в данном частном случае мы при помощи Pos("символов","изменение символов в строке") находим положение подстроки "символов" в строке "изменение символов в строке". Получаем 11.
Pos("символов","изменение символов в строке")+Length("символов")-1 - та же беда, только к 11 прибавляем длинну подстроки "символов"(8), чтобы определить положение в строке последнего символа (19). А так как нужен нам 18й символ, то вычитаем из этой суммы 1.


 
mfender ©   (2003-09-15 07:50) [6]

Короче, после всех этих манипуляций a:=11; b:=18


 
Tumcoat   (2003-09-15 08:36) [7]

при компиляции выходит ошибка:
There is no overloaded version of "Range" that can be called with these arguments
и че с этим делать не знаю.


 
mfender ©   (2003-09-15 08:45) [8]


> There is no overloaded version of "Range" that can be called
> with these argument

Это где такое написано?


 
Tumcoat   (2003-09-15 08:50) [9]

У меня это пишеться внизу, под кодом программы, там же где указываются и др. ошибки


 
mfender ©   (2003-09-15 08:54) [10]

Код покажи.


 
Tumcoat   (2003-09-15 08:56) [11]

Держи, как есть один в один:
temp:=CreateOleObject("Word.Application");
temp.Visible:=true;

WordDocument1.Paragraphs.Item(1).Range.Text:="Заголовок";
a:=2;
b:=6;
WordDocument1.Range(a,b).Font.Bold:=1;
temp.Documents.Item(1).Paragraphs.Add;
WordDocument1.Paragraphs.Item(2).Range.Text:="изменение символов в строке";
WordDocument1.Range((Pos("символов","изменение символов в строке")),
(Pos("символов","изменение символов в строке")+Length("символов")-1));


 
mfender ©   (2003-09-15 09:02) [12]

temp - кто такой. тип его?


 
Tumcoat   (2003-09-15 09:09) [13]

public
temp: variant;


 
Думкин ©   (2003-09-15 09:13) [14]

Откуда рожается WordDocument1?


 
Tumcoat   (2003-09-15 09:15) [15]

>Думкин © (15.09.03 09:13) [14]
>Откуда рожается WordDocument1?

Из стандартных элементов на закладке Servers


 
Tumcoat   (2003-09-15 09:27) [16]

И все таки, как из определенной строки вычленить неск. символов?


 
mfender ©   (2003-09-15 09:30) [17]

как символы вычленить я тебе уже написал. а вот с вордом что делать...


 
Tumcoat   (2003-09-15 09:41) [18]

Интересный вопрос, правда? :-)))


 
Думкин ©   (2003-09-15 09:42) [19]

> temp:=CreateOleObject("Word.Application");
> temp.Visible:=true

А это тогда зачем?


 
Tumcoat   (2003-09-15 09:48) [20]

>Думкин © (15.09.03 09:42) [19]
>А это тогда зачем?

Ну не умею я через WordDocument1 добавлять строки.


 
Думкин ©   (2003-09-15 10:19) [21]

> Tumcoat (15.09.03 09:48)

Тогда ты в себе вначале разберись. Позднее связывание, раннее. Тенцера почитай.


 
Думкин ©   (2003-09-15 10:21) [22]

А как добавлять и чего есть справка по VBA Excel. И еще пара способов.


 
Tumcoat   (2003-09-16 03:03) [23]


> Думкин © (15.09.03 10:21) [22]
> А как добавлять и чего есть справка по VBA Excel. И еще
> пара способов.


Во-первых: причем тут VBA Excel, я спрашивал про Word.
Во-вторых: пробовал, но я не настолько опытный программер, поэтому нужное мне так и не смог найти.
В-третьих: может поделишься этой парочкой способов.


 
Думкин ©   (2003-09-16 05:21) [24]

> Tumcoat (16.09.03 03:03)
1. Про Excel - описался. :-) Просто я часто с ним работаю так.
2. Я и говорю - почитай Тенцера, Елманову, Трепалина. Или можно чего попроще и сердитее.
3. Создаешь в Word нужный тебе макрос и анализируешь его, потом сверяешь это со справкой(не по Экселю, конечно, а по Ворду) и мучаешься. Все через это прошли(ну почти).

Я бы выбрал позднее связывание. Хотя хозяин барин.


 
AGGRESSOR ©   (2003-09-16 10:23) [25]

Есть очень хороший способ- включаешь в Word-е запись макросов, удаляешь, что тебе надо, потом смотришь получившийся макрос, ковыряешь его по необходимости и кладешь в Дельфу. Все.
Кстати, про позднее связывание разделяю мнение Думкина.


 
Tumcoat   (2003-09-17 07:49) [26]

Макросы ни в Word-е ни в Excel-е я писать не умею. Раньше на фиг не надо было, а теперь нет времени (ни писать , ни учиться). Поэтому и кинул вопрос в форум, думал, может есть знающие люди, которые в этом хорошо разбираются и смогут дать ответ. Иначе вообще зачем бы этот форум нужен был бы.


 
Думкин ©   (2003-09-17 07:57) [27]

> Tumcoat (17.09.03 07:49)

Макросы пишутся не просто - а очень просто.

1. Сервис - макрос - начать запись.
2. Делаешь что тебе надо.
3. Жмешь кнопку - стоп запись.
4. Сервис- макрос - макросы - изменить
5. Смотришь на код и материшься.
6. Приходит просветление
7. Пытаешься это засунуть в Дельфи.
8. Попутно читаешь справку по VBA.
9. Опять пытаешься вставить и т.д.
10. Начинаешь гнуть пальцы. :-)

Это проблема не Дельфи - потому никто сильно не кинется разрывать Ворд, сделай сам - выгоды на будущее море, благо по всему видно, что время у тебя есть.


 
Tumcoat   (2003-09-17 08:32) [28]


> Думкин © (17.09.03 07:57)


Ладно умничать, пытался я так сделать, но поскольку раньше с этим не сталкивался, то для меня это темный лес, где черт голову сломит и хвост поломает. И из этой справки по VBA тоже не хрена вытащить не удается. И еще одна проблема, Office у меня русифицированный, а в описаниях макросов и VBA все по-английски.
Так что это мороки на пару недель а у меня времени нету.


 
Думкин ©   (2003-09-17 09:32) [29]

> Tumcoat (17.09.03 08:32)
Ну и ленив же ты братец. С таким подходом в программировании завязывай.

procedure TForm1.Button1Click(Sender: TObject);
var
Word: Variant;
Document: Variant;
Selection,NewSel : Variant;
s : string;
i,j,k : integer;
begin
Try
Word := CreateOleObject("Word.Application");
Word.Visible := true;
try
Document := Word.Documents.Add;
Document.Paragraphs.Add;
Selection:=Document.Paragraphs.Item(1).Range;
Selection.Text:= "1 параграф";
Document.Paragraphs.Add;
Selection:=Document.Paragraphs.Item(2).Range;
Selection.Text:= "2 параграф";
Document.Paragraphs.Add;
Selection:=Document.Paragraphs.Item(3).Range;
Selection.Text:= "изменение символов в строке";
Document.Paragraphs.Add;
Selection:=Document.Paragraphs.Item(4).Range;
Selection.Text:= "4 параграф";
Selection:=Document.Paragraphs.Item(3).Range;
s := Selection.Text;
i := Pos("символов",s);
j := length("символов");
NewSel := Document.Paragraphs.Item(3).Range;
k := NewSel.Start-1;
NewSel.SetRange(k+i,k+i+j);
NewSel.Font.Bold := true;
try
try
Document.SaveAs(ExtractFilePath(Application.ExeName)+"1.doc");
except end;
finally
Document.Close
end;
except
end;
Word.Quit
Except
on E:Exception do begin
Word.Quit;
raise Exception.Create("


 
Tumcoat   (2003-09-17 09:51) [30]


> Думкин © (17.09.03 09:32)

Вот то-то! А то все мама, мама :-)))))
Именно этого я и добивался, сегодня вечером дома и попробую, но уже заранее БА-А-АЛЬШОЕ СПАСИБА.

ЗЫ: А насчет лени, ну а каждого есть свои недостатки, я даже единоборством занимаюсь самым ленивым (айкидо) :-))


 
Думкин ©   (2003-09-17 09:55) [31]

> Tumcoat (17.09.03 09:51)

Дело твое. Но я чтобы написать тот код прошел 9 пунктов.
Сейчас перейду к 10-му и айкидо не поможет. :-)



Страницы: 1 вся ветка

Текущий архив: 2003.09.29;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.015 c
8-96305
zumozzz
2003-06-04 07:22
2003.09.29
Язык


14-96408
FreeSide
2003-09-11 11:28
2003.09.29
Как программу на delphi сделать встраиваемой в Word?


14-96399
neXt
2003-09-11 14:25
2003.09.29
Нужен программер


4-96500
Bless
2003-07-17 17:22
2003.09.29
Разница между сообщениями TVM_GETITEM и TVN_DISPINFO


1-96169
big_bugzy
2003-09-16 12:17
2003.09.29
Как в WideString записать длинную строку (~4500 символов)?