一:获取到内容的node开始和结束node,然后比较要标记的内容在这个段落中的位置
public static bool AddBookMark(ref Aword.Document doc, Aword.Node startNode, Aword.Node EndNode, string strBookMarkKind, int index, out string strError)
{
strError = string.Empty;
try
{
//添加BookMark
Aword.DocumentBuilder builder = new Aword.DocumentBuilder(doc);
builder.MoveTo(startNode);
string strBookMarkName = string.Empty;
strBookMarkName = strBookMarkKind + "_" + index.ToString();
if (index == 0)
{
strBookMarkName = strBookMarkKind;
}
builder.StartBookmark(strBookMarkName);
builder.MoveTo(EndNode);
builder.EndBookmark(strBookMarkName);
}
catch (System.Exception ex)
{
strError = "添加BookMark错误!";
return false;
}
return true;
}
二:比较要标记的内容在这个段落中的run位置,然后确定node的开始和结束
public static bool AddBookMark(Aword.Document doc, Aword.Paragraph para, List<Aword.Node> listNode, string strMarkName)
{
try
{
if (listNode.Count > 0)
{
Aword.Node startNode = listNode[0];
Aword.Node endNode = listNode[listNode.Count - 1];
int startIdx = para.IndexOf(startNode);
if (startIdx >= 0)
{
Aword.BookmarkStart start = new Aword.BookmarkStart(doc, strMarkName);
para.InsertBefore(start, startNode);
int endIdx = para.IndexOf(endNode);
if (endIdx >= 0)
{
Aword.BookmarkEnd end = new Aword.BookmarkEnd(doc, strMarkName);
para.InsertAfter(end, endNode);
}
else
{
return false;
}
}
else
{
return false;
}
}
}
catch (System.Exception ex)
{
return false;
}
return true;
}
三:上述两种都是比较局限,而且都是在不动原文的基础上标,可以把该段内容放入一个新的word中然后,将这段内容细化分割,一个run下面就只有一个字符,这种,然后再去比较,做完之后按照node添加书签,然后再与旧的word中的那段内容替换,当然,这种方式比较麻烦,以后再放上代码