windows - 需要 ActiveX 控件才能将 Excel 嵌入到对话框中

标签 windows excel mfc activex ole

我正在构建“从 Excel 导入”功能。它必须位于从非 MFC 应用程序调用的 DLL 中。必须提供电子表格的图像,用户可以在其中拖动选择框(以选择单元格),然后单击“导入”按钮,然后正确的事情发生。在启动电子表格时遇到问题,在它旁边有一个按钮,并且在 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 客户端项目处于事件状态时无法显示工具栏。我可以将我的“导入”(和其他选项)放在顶部的菜单栏上,但这还不够明显。甚至 float 工具栏也被关闭了。它会这样做是有道理的,因为如果出现无法对当前事件项目执行操作的工具栏会让人感到困惑……但就我而言,这是个问题。

所以现在我想我需要回到对话方法,并嵌入一个 ActiveX 控件,该控件可以调出要导入的 excel 电子表格文件。

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

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

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

希望有人能帮助我!

最佳答案

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

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

关于windows - 需要 ActiveX 控件才能将 Excel 嵌入到对话框中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/224044/

相关文章:

excel - 如何在没有循环引用的情况下自动汇总excel中的整列?

c++ - 如何在MFC中创建 "CArray<CArray<CString>>& results"?

c++ - 在 MFC DLL 中导出返回 vector 的函数

c++ - 使用 WinApi 禁用\启用音频设备

c++ - OpenSSL dll 文件存储在哪里?

windows - 为什么加载到内存中的DLL与原始DLL文件不完全对应?

c# - Windows 服务不执行代码

python - key 错误 : <class 'pandas._libs.tslibs.timestamps.Timestamp' > when saving dataframe to excel

excel - 将多个值索引到单个单元格中

c++ - 重定向 MFC GUI 应用程序中使用的 c++ dll 的控制台输出