【问题标题】:Edit a word paragraph using C#.net使用 C#.net 编辑单词段落
【发布时间】:2015-03-02 10:13:29
【问题描述】:

我正在使用 C#.net、Interop.Word 以编程方式处理 word 文档,我在此文档中的段落以“#”开头和结尾。

例子:

从前,有一个#little 女孩住在森林附近的一个村庄里。小姑娘每次出门都披着一件红色的骑马斗篷,村里的人都叫她小红帽。#

一天早上,小红帽#问她妈妈是否可以去看望她的祖母,因为他们已经有一段时间没有见面了。#

“这是个好主意,”她妈妈说。 #所以他们为小红帽准备了一个漂亮的篮子,准备送给她的祖母。#

现在在所有之间#我需要将文本加粗

【问题讨论】:

    标签: .net ms-word interop range paragraphs


    【解决方案1】:

    解决了这个问题。

            oWord.Selection.HomeKey( Microsoft.Office.Interop.Word.WdUnits.wdStory );
            oWord.Selection.ClearFormatting();
    
            bool done = false;
            while ( !done )
            {
               object txt = "#*#";
               object oFalse = false;
               object oTrue = true;
               object wdWrap = Microsoft.Office.Interop.Word.WdFindWrap.wdFindStop;
               oWord.Selection.Find.Execute( ref txt, ref oFalse, ref oFalse, ref oTrue, ref oFalse, ref oFalse, ref oTrue, ref wdWrap, ref oFalse );
               if ( oWord.Selection.Find.Found == false )
               {
                  done = true;
               }
               else
               {
                  oWord.Selection.Font.Bold = 1;
                  oWord.Selection.Text = oWord.Selection.Text.Substring( 1, oWord.Selection.Text.Length - 2 );
                  oWord.Selection.MoveRight( Microsoft.Office.Interop.Word.WdUnits.wdCharacter );
               }
            }
    

    【讨论】:

    • 如果您不想删除“#”,则只需删除以下行: oWord.Selection.Text = oWord.Selection.Text.Substring( 1, oWord.Selection.Text.Length - 2);
    • 谢谢亲爱的,它工作得很好,仍然有一个概率,最后两个范围之间没有断线,例如:#“这是个好主意,”她妈妈说#。 #所以他们为小红帽打包了一个漂亮的篮子,准备送给她的祖母。#代码找不到最后一个范围!
    • 修复并更新了代码。更改为:oWord.Selection.MoveRight(Microsoft.Office.Interop.Word.WdUnits.wdCharacter);
    【解决方案2】:
    Sub Macro1()
    '
    ' Macro1 Macro
    '
    '
        Selection.HomeKey Unit:=wdStory
        Selection.Find.ClearFormatting
        Dim done As Boolean
        done = False
    While Not done
        With Selection.Find
            .Text = "#*#"
            .Replacement.Text = "*"
            .Forward = True
            .Wrap = wdFindStop
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchAllWordForms = False
            .MatchSoundsLike = False
            .MatchWildcards = True
        End With
    
     Selection.Find.Execute
    
     If Selection.Find.Found = False Then
        done = True
     Else
        Selection.Text = Mid(Selection.Text, 2, Len(Selection.Text) - 2)
        Selection.Font.Bold = wdToggle
        Selection.EndKey Unit:=wdLine
    End If
    
    Wend
    
    End Sub
    

    【讨论】:

    • 你能解释一下我为什么在 Find.Text 的 2 # 之间使用 * 吗?此外,我希望 2 # 之间的整个单词都用粗体表示,这意味着每个 2 # 都将范围设为粗体
    • 亲爱的 Derek,这救了我的命,除了我有几个问题:首先我使用 C#.net,所以我对你的代码做了一些更改,例如我没有替换。所以我把它留空,现在你的代码只选择 2 # 之间的第一个范围,其他范围没有被编辑
    • 您现在可以发布您的 c# 代码吗?可以忽略 Replacement.Text 你还有“while”循环吗?您是否希望删除 # 符号? (只需在#之间留下单词?)
    • 亲爱的,我发布了我的代码作为答案,感谢您的帮助,所以这很好,除了它在一个范围内工作,我需要它在 2 之间的所有范围内工作#
    【解决方案3】:
    oWord.Selection.ClearFormatting();
    
     bool done = false;
     while (!done)
     {
        object txt = "#*#";
        object oFalse = false;
         object oTrue = true;
        object wdWrap =      Microsoft.Office.Interop.Word.WdFindWrap.wdFindStop;
     oWord.Selection.Find.Execute(ref txt, ref oFalse, ref oFalse, ref oTrue, ref oFalse, ref oFalse, ref oTrue, ref wdWrap  , ref oFalse, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);
      if (oWord.Selection.Find.Found == false)
         {
            done = true;
         }
      oWord.Selection.Text = oWord.Selection.Text.Substring(2 - 1, oWord.Selection.Text.Length - 2);
       oWord.Selection.Font.BoldBi = 1;
       oWord.Selection.Bookmarks.Add("TM2011_517_1", ref oMissing);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-08
      • 1970-01-01
      • 1970-01-01
      • 2022-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多