2014-04-14 5 views
0

Я использую следующий код, чтобы вставить таблицу с 2 ячейками в MS Word с помощью Delphi XE5. Весь шрифт для ячеек таблицы довольно прост. За исключением 1 слова. Мне нужно, чтобы это слово было смелым, а остальное - нет.Как сделать определенный текст полужирным шрифтом в MS Word

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

wrdDoc.Tables.Add(wrdSelection.Range,3,2); 
wrdDoc.tables.Item(3).Rows.Alignment := wdAlignRowLeft; 

wrdDoc.Tables.Item(3).Columns.Item(1).SetWidth(36,wdAdjustNone); 
wrdDoc.Tables.Item(3).Columns.Item(2).SetWidth(379,wdAdjustNone); 
wrdDoc.tables.Item(3).Borders.Item(wdBorderLeft).LineStyle := wdLineStyleNone; 
wrdDoc.tables.Item(3).Borders.Item(wdBorderRight).LineStyle := wdLineStyleNone; 
wrdDoc.tables.Item(3).Borders.Item(wdBorderVertical).LineStyle := wdLineStyleNone; 
wrdDoc.tables.Item(3).Borders.Item(wdBorderTop).LineStyle := wdLineStyleNone; 
wrdDoc.tables.Item(3).Borders.Item(wdBorderBottom).LineStyle := wdLineStyleNone; 
wrdDoc.tables.Item(3).Borders.Item(wdBorderHorizontal).LineStyle := wdLineStyleNone; 

wrdDoc.Tables.Item(3).Cell(1,1).Range.InsertAfter('8.1'); 
wrdDoc.Tables.Item(3).Cell(1,1).Range.Paragraphs.Alignment := wdAlignParagraphleft; 
wrdDoc.Tables.Item(3).Cell(1,1).Range.Font.Size := 12; 
wrdDoc.Tables.Item(3).Cell(1,1).Range.Font.Bold := false; 
wrdDoc.Tables.Item(3).Cell(1,1).Range.Font.underline := false; 

wrdDoc.Tables.Item(3).Cell(1,2).Range.InsertAfter('this will not be bold text'); 
wrdDoc.Tables.Item(3).Cell(1,2).Range.InsertAfter('this will not be bold text'); 
wrdDoc.Tables.Item(3).Cell(1,2).Range.InsertAfter('THIS TEXT MUST BE BOLD'); 
wrdDoc.Tables.Item(3).Cell(1,2).Range.Paragraphs.Alignment := wdAlignParagraphJustify; 
wrdDoc.Tables.Item(3).Cell(1,2).Range.Font.Size := 12; 
wrdDoc.Tables.Item(3).Cell(1,2).Range.Font.Bold := false; 
wrdDoc.Tables.Item(3).Cell(1,2).Range.Font.underline := false; 

Как вы можете видеть в последней части кода, есть 3 вызова для InsertAfter(), предложения я вставляя очень долго. и Delphi ограничивает меня до 255, поэтому я просто вызываю их более одного раза, и это так же хорошо, как называть его один раз.

Только последний звонок должен быть полужирным. Остальные должны просто придерживаться формата, определенного выше.

Любая помощь будет оценена по достоинству. Спасибо

ответ

1

Мне удалось найти способ. это немного грязно, но делает работу.

Procedure MakeBold(SearchStr:String); 
Begin 
WrdApp.Selection.Find.ClearFormatting; 
    WrdApp.Selection.Find.Text := SearchStr; 
    WrdApp.Selection.Find.Forward := True; 
    WrdApp.Selection.Find.Wrap := wdFindContinue; 
    WrdApp.Selection.Find.Format := False; 
    WrdApp.Selection.Find.MatchCase := true; 
    WrdApp.Selection.Find.MatchWholeWord := wrfMatchCase in Flags; 
    WrdApp.Selection.Find.MatchWildcards :=wrfMatchWildcards in Flags; 
    WrdApp.Selection.Find.MatchSoundsLike := False; 
    WrdApp.Selection.Find.MatchAllWordForms := False; 
    { Perform the search } 
    WrdApp.Selection.Find.Execute(); 
    WrdApp.Selection.Font.Bold:=True; 
End; 

Тогда я просто позвонить MakeBold('THIS TEXT MUST BE BOLD'); и это решает проблему.

Любые другие возможные ответы по-прежнему приветствуются, потому что этот метод может также сделать другой несвязанный текст также полужирным.

0

Вы работаете слишком сильно. :-) Вам нужно больше познакомиться с диапазонами слов (и использованием временных переменных). Испытано с использованием блока Word2010 в Delphi 10 Сиэтле, используя слово 2013.

var 
    WordTbl: Table; 

// Grab a local reference to the table for ease of use 
Tbl := wrdDoc.Selection.Tables.Item(3); 
Tbl.Cell(1, 2).Range.Text := 'not bold'; 

// Make sure the cell is the current selection 
Tbl.Cell(1, 2).Select; 

// Move the selection to the end of the text we wrote before 
wrdDoc.Selection.EndKey(wdLine, wdMove); 

// Add the next section of the text and move to the end, so we 
// know for sure where Word thinks we are now. Notice the spaces 
// at both ends - for some reason they make a difference 
wrdDoc.Selection.Range.Text := ' BOLD TEXT '; 
wrdDoc.Selection.EndKey(wdLine, wdMove); 

// Move back two words to select the text we just added and bold 
wrdDoc.Selection.MoveLeft(wdWord, 2, wdExtend); 
wrdDoc.Selection.Font.Bold := 1; 

// End of the line again, and turn bold off, then more text 
wrdDoc.Selection.EndKey(wdLine, wdMove); 
wrdDoc.Selection.Font.Bold := 0; 
wrdDoc.Selection.Range.Text := 'not bold again'; 
0

Это решение делает все матчи в ActiveDocument смелы

function TfmMain.MakeBold(SearchStr: String; App: OLEVariant {Word application var}): Integer; 
var 
    Find: OLEVariant; 
begin 
    Find := App.Selection.Find; 
    Find.ClearFormatting; 
    Find.Forward := true; 
    Find.Wrap := wdFindStop; 
    Find.Format := false; 
    Find.MatchCase := false; 
    Find.MatchWholeWord := true; 
    Find.MatchWildcards := false; 
    Find.MatchSoundsLike := false; 
    Find.MatchAllWordForms := false; 

    Find.Text := SearchStr; 
    while Find.Execute() do 
    begin 
    App.Selection.Font.Bold := true; 
    App.Selection.Collapse(wdCollapseEnd); 
    end; 
    Find := UnAssigned; 
end; 
Смежные вопросы