捕获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 <b>There</b><b>. </b><b>How </b>are <i>you </i><i>?</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而不是通过add(+)操作进行连接。
无论如何COM互操作的性能是缓慢的,所以请忍受它。