Come fare un certo testo in grassetto nella MS Word
-
26-12-2019 - |
Domanda
Sto usando il seguente codice per inserire una tabella con 2 celle in MS Word utilizzando Delphi XE5.Tutto il font per le cellule del tavolo è piuttosto semplice.Tranne 1 parola.Ho bisogno di questa parola per essere audace mentre il resto non lo è.
Aiutami a regolare il mio codice in modo da poter rendere la parola 1 grassetto.
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;
.
Come puoi vedere nell'ultima parte del codice, ci sono 3 chiamate per InsertAfter()
, le frasi che sto inserendo sono molto lunghe.E Delphi mi limita a 255, quindi li chiami più di una volta ed è altrettanto buono come chiamarlo una volta.
Solo l'ultima chiamata, deve essere audace.Il resto dovrebbe semplicemente rimanere il formato definito sopra.
Qualsiasi aiuto sarebbe apprezzato.Grazie
Soluzione
Sono riuscito a trovare un modo.È un po 'disordinato ma fa il lavoro.
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;
.
Allora chiamoso MakeBold('THIS TEXT MUST BE BOLD');
e risolve il problema.
Qualsiasi altra possibile risposte sono ancora gradite, poiché questo metodo potrebbe rendere anche un altro testo non correlato.
Altri suggerimenti
Stai lavorando troppo forte.:-) Devi diventare più familiare con le intervalli di parole (e l'uso di variabili temporanee).Testato utilizzando l'unità Word2010 in Delfi 10 Seattle, utilizzando Word 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';
. Questa soluzione rende tutte le partite nell'attiveCument sono audaci
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;
.