分享

C#Word外接程序编程vsto

 偷心无痕 2015-03-24

    最近公司开发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也不愿换去。怪只怪自己啊。  图就不传了吧。反正只要记得标签的里面是可编辑区域即可~~~

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多