在word开发中,跨文件数据拷贝粘贴出现ComException(“组织策略阻止了该操作“)异常的处理方式

一、问题描述

在word开发中有时要求把一个文档的内容拷贝到另一个文档,如下所述。然而,在执行该项工作过程中,曾遇到一个意向不到的情况,查询了好多网站,虽然在bing网站搜寻过程中也有人遇到此问题,但一直没有搜寻到有人给出解决措施。

       情况是这样的,在执行Range.Copy()或Range.CopyAsPicture()方法时,出现System.Runtime.InteropServices.ComException异常,并提示:组织策略阻止了该操作。 造成程序运行中断。显然,在调用word模型对象过程中,com调用出现问题。虽然该异常不是每次都出现,但绝大多数时候出现,导致程序根本无法使用。

        程序如下所示:

        /// <summary>
        /// 改方法传入一个文档范围(Range)和新创建文档的名称。就是新创建一个文档copyFileName,将传入的文档范围中的文档拷贝到新文档中,并关闭新文档。
        /// </summary>
        /// <param name="document">被拷贝文档的范围----Range对象</param>
        /// <param name="copyFileName"> 新创建的文档名称(含路径) </param>

     public static void SaveACopy(Word.Document document,string copyFileName)    //改方法传入两个参数,第一个参数
        {         
            object visible = (object)true;         //新创建的文档可见
            templateDocument = document.Application.Documents.Add(ref G_Missing, ref G_Missing, ref G_Missing,ref visible);   //创建新文档,让其可见
            Word.Range original_Range = document.Range();     //获取原有文档全部内容范围Range
            original_Range.Select();                                                   //选择
            original_Range.CopyAsPicture();                                   //拷贝到clipboard


            Word.Range copy_Range = templateDocument.Range();            //获取新创建文档的范围Range
            object collapseDirection = Word.WdCollapseDirection.wdCollapseEnd;  
           copy_Range.Collapse(ref collapseDirection);                                //折叠,获取文档尾部位置尾部
            copy_Range.Select();                                                                         //选中插入位置
            copy_Range.Paste();                                                                         //粘贴  。。。。。就是这里出现问题,出现"System.Runtime.InteropServices.ComException:组织策略阻止了该操作,组织策略阻止了该操作。”  测试过程中,该异常大多数时候出现,少数时候是不出现该异常的,用的word2016。
            object p = (object)copyFileName;      
            templateDocument.SaveAs(ref p);  //保存新创建文档
            templateDocument.Close();           //关闭新创建文档     
        }

二、可用的解决措施

       经过反复试验,虽然调整了word信任中心的一些参数,但都无效。后来偶尔发现将修改了新创建文档是否可见的参数后,不在出现这个异常。即将object visible = (object)true 修改为object visible = (object)false。如果需要查看该文档,可以先拷贝保存后再重新打开。虽然该方法有些笨拙,但在一定程度上可以满足使用要求。

 

     /// <summary>
        /// 改方法传入一个文档范围(Range)和新创建文档的名称。就是新创建一个文档copyFileName,将传入的文档范围中的文档拷贝到新文档中,并关闭新文档。
        /// </summary>
        /// <param name="document">被拷贝文档的范围----Range对象</param>
        /// <param name="copyFileName"> 新创建的文档名称(含路径) </param>

     public static void SaveACopy(Word.Document document,string copyFileName)    //改方法传入两个参数,第一个参数
        {         
            object visible = (object)false;         //就是把true 改为false,新创建的文档不可见
            templateDocument = document.Application.Documents.Add(ref G_Missing, ref G_Missing, ref G_Missing,ref visible);   //创建新文档,让其可见
            Word.Range original_Range = document.Range();     //获取原有文档全部内容范围Range
            original_Range.Select();                                                   //选择
            original_Range.CopyAsPicture();                                   //拷贝到clipboard


            Word.Range copy_Range = templateDocument.Range();            //获取新创建文档的范围Range
            object collapseDirection = Word.WdCollapseDirection.wdCollapseEnd;  
           copy_Range.Collapse(ref collapseDirection);                                //折叠,获取文档尾部位置尾部
            copy_Range.Select();                                                                         //选中插入位置
            copy_Range.Paste();                                                                         //把visible改为false后,不在出现原来的ComException异常
            object p = (object)copyFileName;      
            templateDocument.SaveAs(ref p);  //保存新创建文档
            templateDocument.Close();           //关闭新创建文档     
        }

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值