在C#中操作Excel也做了好久了,最近正在做个程序,遇到个问题。
    我需要在Mdi窗体中打开一个或多个嵌入Excel文档的窗体,然后获取它的Application还有WorkSheet啥的,传到另外的一个Mdi子窗体中对这个Application进行操作。简单说,就是打开一个Excel文件,然后在一个单独窗体上对当前打开的文件进行一些操作,比如选中单元格,自动填入一些值什么的等等。
    然后现在发现这是可以实现的,但是偶尔会出现莫名其妙的错误,像COMException之类“HRESULT:XXXXXXXXX”,或者报“类 Range 的 Select 方法无效”特别是同时打开多个Excel文件的时候,而有时却工作正常。打开一个Excel文档的时候出现概率比较少,但是操作比较快的时候也会出现异常。
    补充下,我是用WebBrowser嵌入Excel实现的,在WebBrowser控件的DocumentCompleted事件中获取Excel的Application,可能这个事件加载比较慢,但是一旦这个事件发生以后,这个Application的引用应该就获得了,和我之后的操作速度顺序没有关系了呀。
    不知道在另一个窗体操作Excel的Application时候需要注意些什么,才能避免这个异常?我感觉好像是切换嵌入Excel文件窗体的时候,全局变量中保存的WorkSheet可能不是界面显示的那个Sheet,所以报错?感觉很奇怪,时好时坏的,不知是否需要做些同步什么的?
    有没有人做过,给些建议吧,谢谢!

解决方案 »

  1.   

    Excel开发确实麻烦,多测试几次估计就能找到规律了,可能是活动WorkSheet,活动cell在来回切换的时候没有弄好吧
      

  2.   

    试了一天了,想上来问问有没有人做过窗体之间操作Excel的,交流下经验^_^
      

  3.   

    再试了几次,发现是操作一个Excel文档,然后激活另外一个嵌入Excel文档的窗体(仅仅是选中这个Mdi窗体,没有对其中的Excel文档进行操作),然后操作对应的WorkBook又报COMException的异常,猜想可能是需要先Activate,调用Activate函数,还是异常,晕死。
      

  4.   

    发现几个窗体之间几次切换以后就会莫名其妙的异常,感觉WebBrowser显示的Excel显示也不太正常,但是在另一个独立的窗体上填充当前激活的Cell也可以成功,但是不能调用select和activate不知是什么原因
      

  5.   

    也遇到了同样的问题。
    多个文档切换后不正常;嵌入的excel已关闭,外部的excel文档也都被关闭了。
    不太好使。