C# 将word文本捕获为html

C# 将word文本捕获为html,c#,ms-word,C#,Ms Word,我正在开发MS Word应用程序捕获工具,在该工具中,我们通过一些按键来捕获选定的内容。一切都完成了。 现在,在选定的范围内,我想以html为例捕获文本 Text=你好。你怎么样 我已经通过下面的代码示例完成了上面的查询 string str = string.Empty; Word.Range rngFindBold = ((Word.DocumentClass)(wh.Document)).ActiveWindow.Selection.Range; rngFindBold.Find.

我正在开发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;
    }
}
string str=string.Empty;
Word.Range rngFindBold=
((Word.DocumentClass)(wh.Document)).ActiveWindow.Selection.Range;
rngFindBold.Find.Font.Bold=-1;
foreach(rngFindBold.Words中的Word.Range rngWord)
{
如果(rngWord.Bold!=0)
{
//rngWord.Bold=0;
//rngWord.Text=“”+rngWord.Text+”;
str+=“”+rngWord.Text+“”;
}
else if(rngWord.Italic!=0)
{
//rngWord.Italic=0;
//rngWord.Text=“”+rngWord.Text+”;
str+=“”+rngWord.Text+“”;
}
else if(rngWord.Underline!=0)
{
//rngWord.Underline=0;
//rngWord.Text=“”+rngWord.Text+”;
str+=“”+rngWord.Text+“”;
}
其他的
{
str+=rngWord.Text;
}
}
结果=
Hello b这里/bb/bbHow/bare iyou/ii?/i

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


如何优化上述代码?

使用
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=新建StringBuilder();
Word.Range rngFindBold=
((Word.DocumentClass)(wh.Document)).ActiveWindow.Selection.Range;
rngFindBold.Find.Font.Bold=-1;
foreach(rngFindBold.Words中的Word.Range rngWord)
{
如果(rngWord.Bold!=0)
{
builder.Append(“+rngWord.Text+”);
}
else if(rngWord.Italic!=0)
{
builder.Append(“+rngWord.Text+”);
}
else if(rngWord.Underline!=0)
{
builder.Append(“+rngWord.Text+”);
}
其他的
{
builder.Append(rngWord.Text);
}
}

只有一个常规提示:使用StringBuilder,而不是通过add(+)操作进行压缩


无论如何,COM互操作的性能很慢,所以请注意。

这只是我的浏览器编码,还是Yuck的编辑真的使示例输出崩溃了?顺便说一句,示例输入文本的“Hello”以粗体显示,示例输出字符串没有。:-)