最近公司开发vsto的word的程序,要写一个C#操作word的类,其他的没什么就是像word里添加一条数据出现了小的问题,想像一个写了保护的文档主写入数据需要加入可编辑区域,另外还要用word的书签来进行定位。可是用微软msdn上面的例子写的会出现问题就是用户可以手动的把书签删除。这可能会造成程序潜在的不稳定和bug。
所以就想办法解决。
下面是代码
///
<summary>
/// 对当前活动文档中一标签赋值
/// </summary>
/// <param
name="BookMarkName">标签名</param>
/// <param
name="BookMarkValue">给标签赋的值</param>
public override void SetBookMarkValue(string BookMarkName, object
BookMarkValue)
{
try
{
object bkName = null;
bkName = BookMarkName;
if (Application.ActiveDocument.Bookmarks.Exists(BookMarkName) ==
true)
{
//解决从form中连续对模板中某一标签赋值时,值累加的问题
BookMarkReplaceRange(BookMarkName, BookMarkValue);
}
}
catch (Exception ex)
{
throw new Exception("方法:SetBookMarkValue(string BookMarkName,
object BookMarkValue)" + "原因:未知原因\n\n" +
"系统提示:" + ex.Message + "\n");
}
}
internal void BookMarkReplaceRange(string bookmarkName, object
newText)
{
try
{
object editor = Word.WdEditorType.wdEditorEveryone;
object missingValue = Type.Missing;
object oBookmarkName = bookmarkName;
string newBookMarkValue = string.Empty;
newBookMarkValue = newText.ToString();
Word.Range rng = Application.ActiveDocument.Bookmarks.get_Item(ref
oBookmarkName).Range;
rng = rng.GoToEditableRange(ref editor);
rng.Text = newBookMarkValue;
}
catch (Exception ex)
{
throw new Exception("方法:BookMarkReplaceRange(string
bookmarkName, object newText)" + "原因:未知原因\n\n" +
"系统提示:" + ex.Message + "\n");
}
}
定义书签的时候需要吧书签订的大点,然后在里面加入一个可编辑区域即可。
他的原理是根据书签定位,然后找到书签里面的可编辑区域然后往里面写入数据,比微软提供的方法简单的多。下面是书签的截图
。。。。
我不得不说新浪bolg的不专业啊。上传个3k的jpg竟然传不上去。郁闷。只怪我是个恋旧的人啊。申请了cnblog也不愿换去。怪只怪自己啊。
图就不传了吧。反正只要记得标签的里面是可编辑区域即可~~~
|