捕获单词文本为html

时间:2011-08-25 13:40:47

标签: c# ms-word

我正在研究MS Word应用程序捕获工具,我们通过一些按键捕获所选内容。一切都完成了。 现在在选定的范围内,我想将文本捕获为html,例如

Text = 你好。

我已经通过以下代码示例

完成了上述查询
string str = string.Empty;
Word.Range rngFindBold =
    ((Word.DocumentClass)(wh.Document)).ActiveWindow.Selection.Range;
rngFindBold.Find.Font.Bold = -1;
foreach (Word.Range rngWord in rngFindBold.Words)
{
    if (rngWord.Bold != 0)
    {
        // rngWord.Bold = 0;
        //rngWord.Text = "<b>" + rngWord.Text + "</b>";
        str += "<b>" + rngWord.Text + "</b>";
    }
    else if (rngWord.Italic != 0)
    {
        // rngWord.Italic = 0;
        //  rngWord.Text = "<i>" + rngWord.Text + "</i>";
        str += "<i>" + rngWord.Text + "</i>";
    }
    else if (rngWord.Underline != 0)
    {
        //  rngWord.Underline = 0;
        //  rngWord.Text = "<u>" + rngWord.Text + "</u>";
        str += "<u>" + rngWord.Text + "</u>";
    }
    else
    {
        str += rngWord.Text;
    }
}

结果= Hello &lt;b&gt;There&lt;/b&gt;&lt;b&gt;. &lt;/b&gt;&lt;b&gt;How &lt;/b&gt;are &lt;i&gt;you &lt;/i&gt;&lt;i&gt;?&lt;/i&gt;

选择多行内容时,上面的代码需要更多时间

如何优化上述代码?

2 个答案:

答案 0 :(得分:0)

而不是使用+=使用StringBuilder对象。这会处理字符串操作更高效

这会将您的代码更改为:

StringBuilder builder = new StringBuilder();
Word.Range rngFindBold =
((Word.DocumentClass)(wh.Document)).ActiveWindow.Selection.Range;
rngFindBold.Find.Font.Bold = -1;
foreach (Word.Range rngWord in rngFindBold.Words)
{
    if (rngWord.Bold != 0)
    {
        builder.Append("<b>" + rngWord.Text + "</b>");
    }
    else if (rngWord.Italic != 0)
    {
        builder.Append("<i>" + rngWord.Text + "</i>");
    }
    else if (rngWord.Underline != 0)
    {
        builder.Append("<u>" + rngWord.Text + "</u>");
    }
    else
    {
        builder.Append(rngWord.Text);
    }
}

答案 1 :(得分:0)

只需一个常规提示:使用StringBuilder而不是通过添加(+)操作连接。

无论如何,COM Interop的性能都很慢,所以请耐心等待。