需要ActiveX控件将Excel嵌入到对话框中

时间:2008-10-22 00:17:41

标签: windows excel mfc activex ole

我正在构建“从Excel导入”功能。它必须位于DLL中,从非MFC应用程序调用。必须提供电子表格的图像,用户可以拖动选择框(选择单元格),然后单击“导入”按钮,并发生正确的事情。无法获取电子表格,在其旁边有一个按钮,并在DLL中发生。

我在DLL中进入了MFC对话框的路径,但在尝试在对话框的窗口上为excel启动OLE客户端时被阻止。只有支持我发现使用OLE显示Excel需要SDI。我能够使自动化功能起作用,我可以在对话框中读取单元格并绘制它们的“虚假图像”......但我担心这将不符合我的要求。< / p>

所以我尝试创建一个SDI。我能够创建一个SDI,将Excel作为OLE客户端。我能够处理“选择更改”事件,并获取我需要的单元格数据。在这一点上我被挫败了两件事:

  1. 无法使此SDI在MFC DLL中正常工作。在CWinApp构造函数中崩溃,断言AfxGetThread不为null。将“theApp”移动到单个导出的DLL函数中的本地作用域,但仍然无法使其工作,但具有不同的症状:添加AFX_MANAGE_STATE时崩溃(AfxGetStaticModuleState());导出DLL函数,如果我没有使用它,则从未输入OnInitInstance。尝试添加对应用程序的Run()函数的调用,但这没有帮助。如果有人认为他们知道问题是什么,我可以发布此代码。

  2. Excel客户端项处于活动状态时无法显示工具栏。我可以把我的“导入”(以及其他选项)放在顶部的菜单栏上,但这不够明显。即使是浮动工具栏也已关闭。它是有意义的,它会这样做,因为有一个工具栏存在无法对当前活动的项目采取行动会令人困惑......但在我的情况下,这是一个问题。

  3. 所以现在我想我需要回到对话框方法,并嵌入一个ActiveX控件来调出excel电子表格文件进行导入。

    必须允许我处理选择更改事件,或者必须允许我查找选择的单元格(或者如果单击对话框中的“导入”按钮导致最近选中的单元格将导致所选单元格未被选中)。< / p>

    它还必须附带合理的许可条款,因为这将用于广泛向公众开放的商业应用程序。

    如果有人知道对我尝试的任何一种方法进行“快速修复”,那也是有用的。

    希望有人可以帮助我!

1 个答案:

答案 0 :(得分:0)

如果您只想嵌入Excel,则不需要任何内容​​。

只需将其嵌入标准OCX主机控件即可。