C# 将word文本捕获为html
我正在开发MS Word应用程序捕获工具,在该工具中,我们通过一些按键来捕获选定的内容。一切都完成了。 现在,在选定的范围内,我想以html为例捕获文本 Text=你好。你怎么样 我已经通过下面的代码示例完成了上面的查询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.
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”以粗体显示,示例输出字符串没有。:-)