Текущий архив: 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.52 MB
Время: 0.009 c