5

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

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

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

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

  2. Excel 客户端项处于活动状态时无法显示工具栏。我可以将我的“导入”(和其他选项)放在顶部的菜单栏上,但这还不够明显。甚至一个浮动工具栏也被关闭了。这样做是有道理的,因为如果存在无法对当前活动项目执行操作的工具栏会令人困惑……但就我而言,这是一个问题。

所以现在我想我需要回到对话框方法,并嵌入一个 ActiveX 控件,该控件会显示一个要导入的 Excel 电子表格文件。

必须允许我处理选择更改事件,或者必须允许我找到选择了哪些单元格(或者如果单击对话框上的“导入”按钮导致所选单元格变为未选中,则最近选择了哪些单元格)。

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

如果有人知道我一直在尝试的任何一种方法的“快速修复”,那也很有用。

希望可以有人帮帮我!

4

1 回答 1

0

如果您只想嵌入 Excel,则不需要任何东西。

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

于 2008-10-23T13:25:52.203 回答