捕获word文本作为html

本文关键字:html 文本 word 捕获 | 更新日期: 2023-09-27 18:06:34

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

Text = Hello There。怎么样?

我已经完成了上面的查询下面的代码示例

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;
    }
}

Result = 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;

以上代码在选择多行内容时花费更多时间

我如何优化上面的代码?

捕获word文本作为html

不使用+=,使用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);
    }
}

一个常规提示:使用StringBuilder而不是通过add(+)操作进行连接。

无论如何COM互操作的性能是缓慢的,所以请忍受它。