我正在研究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 <b>There</b><b>. </b><b>How </b>are <i>you </i><i>?</i>
选择多行内容时,上面的代码需要更多时间
如何优化上述代码?
答案 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的性能都很慢,所以请耐心等待。