如何在Form中嵌入Excel

.NET Framework1.0和1.1 都没有实现OleContainer组件。查遍MSDN,最后得了一个提示:可以使用IEBrowser来模拟OleContainer。这绝对是一个超重的实现,不过,最目前情况下,却是一个最省事的方法。本文就简单的说明一下,如何使用IEBrowser控件来嵌入Excel表格。

如何在Form中嵌入Excel   沐枫网志


    1. 首先,需要在工具栏中导入“Microsoft WEB 浏览器”。可以在工具栏上点右键,选择“添加/移除项”。然后在出现的自定义工具箱中选择“COM组件”,最后在组件中找到“Microsoft Web 浏览器”,勾选并确定。

    2. 建立一个Form,在工具栏中选择“Microsoft Web浏览器”组件,放到Form中。

    3. 使用以下的代码,以便导入一个Excel表格:

axWebBrowser1.Navigate(@"c:\test\test.xls");

    4. 加入axWebBrowser1的DocumentComplete事件。并在事件中获取Excel的Ole对象:

public Excel.Workbook wb;

private void axWebBrowser1_DocumentComplete(object sender, AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEvent e)
  
{
    wb 
= (Excel.Workbook)axWebBrowser1.Document;
  }

    5. 通过wb,就可以直接访问Excel表格了。

虽然用IE控件很简单,但并不是一个很好的方法。目前也只有第三方控件,或是期待.NET 2.0了。如果大家有更好的方法,不妨共享一下。

潜在问题:
    1. 在使用Office2000时,Excel退出是一个问题。可能导致无法准确让Excel退出,或者Excel在退出时产生错误。这样可能在系统中留下一大堆Excel进程。实践中发现,使用Office2003时,这个问题被解决。OfficeXP和Office2002没有做过试验,不知道是否也解决了。
    2. 数据操作比较慢。这是与COM接口相关。对COM有较深了解的话,可以进行许多优化,使效率得到大的提升。

暂时解决方法:
    1. 使用Excel2003,可解决Excel退出问题
    2. 使用Office Web Components v10/v11 的 SpreadSheet组件目前是一个好的解决方法。

附:
    使用OWC,建议使用OWC10或OWC11版本。OWC9因为许可证问题比较麻烦,不建议使用。
    SpreadSheet可接受的数据源比较多种,包括 ADODB.RecordSet,csv格式文本,HTML表格格式,以及XML格式,使用上比较灵活,并且可以在SpreadSheet工具栏上直接导出到Excel中。
    关于SpreadSheet的使用,网络上有许多文章已经介绍了,在google中就可以搜索得到,希望对大家有所帮助。

posted @ 2005-09-11 15:42  沐枫  阅读(7687)  评论(7编辑  收藏  举报