【问题标题】:How to make certain text bold in MS Word如何在 MS Word 中使某些文本变为粗体
【发布时间】:2017-01-21 22:15:38
【问题描述】:

我正在使用以下代码使用 Delphi XE5 在 MS Word 中插入一个包含 2 个单元格的表格。表格单元格的所有字体都非常简单。 1个字除外。我需要这个词加粗,其余的不加粗。

请帮我调整我的代码,以便我可以将 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;

正如您在代码的最后一部分中看到的,InsertAfter() 有 3 次调用,我插入的句子很长。而 Delphi 将我限制为 255,所以我不止一次调用它们,它和调用一次一样好。

只有最后一次调用,必须是粗体。其余的应该保持上面定义的格式。

我们将不胜感激。谢谢你

【问题讨论】:

    标签: delphi ms-word delphi-xe5


    【解决方案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'); 即可解决问题。

    仍然欢迎任何其他可能的答案,因为这种方法可能会使其他不相关的文本也加粗。

    【讨论】:

      【解决方案2】:

      你工作太辛苦了。 :-) 您需要更加熟悉单词范围(以及临时变量的使用)。在 Delphi 10 Seattle 中使用 Word2010 单元进行测试,使用 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';
      

      【讨论】:

        【解决方案3】:

        此解决方案使 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;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-30
          相关资源
          最近更新 更多