我正在构建一个“从Excel导入”函数。它必须在一个DLL中,从一个非MFC应用程序调用。必须提供一个电子表格的图像,用户可以在其中拖动选择框(以选择单元格),然后单击“导入”按钮,然后让正确的事情发生。在启动电子表格时遇到麻烦,旁边有一个按钮,然后让它在DLL中发生。
我走了DLL内部MFC对话框的路线,但在试图在对话框的窗口上为Excel调出OLE客户端时被阻止。我发现只有使用OLE显示Excel的支持需要SDI。我能够让自动化功能工作,我可以读取这些单元格,并在对话框中绘制它们的“假图像”......但恐怕这将不符合我的要求。
所以我尝试创建一个SDI。我能够创建一个SDI,将Excel作为一个OLE客户端。我能够处理“选择更改”事件,并转到我需要的单元格数据。在这一点上,我被两个项目挫败:
1.未能使此SDI在MFC DLL中工作。CWinApp构造函数中崩溃,AssertAfxGetThread不为null。已将“theApp”移动到单个导出DLL函数内的本地作用域,但仍无法使其工作,但症状不同:添加AFX_MANAGE_STATE(AfxGetStaticModuleState())时崩溃;导出的DLL函数,如果我不使用,OnInitInstance永远不会进入。尝试添加调用应用的Run()函数,但没有帮助。如果有人认为他们知道问题是什么,我可以发布此代码。
1.当Excel客户端项目处于活动状态时,无法显示工具栏。我可以将“导入”(和其他选项)放在顶部的菜单栏上,但这还不够明显。即使是浮动工具栏也被关闭了。这样做是有道理的,因为显示一个无法对当前活动项目执行操作的工具栏会令人困惑...但在我的情况下,这是一个问题。
所以现在我想我需要回到对话框的方法,并嵌入一个ActiveX控件,该控件将打开一个Excel电子表格文件进行导入。
必须允许我处理选择更改事件,或者必须允许我查找选定的单元格(或者如果单击对话框上的“导入”按钮导致选定的单元格变为未选定,则查找最近选定的单元格)。
它还必须附带合理的许可条款,因为它将用于公众广泛可用的商业应用程序。
我也对我一直在尝试的任何一种方法的“快速修复”感兴趣。
1条答案
按热度按时间ezykj2lf1#
如果您只想嵌入Excel,则不需要任何东西。
只需将其嵌入到标准的OCX主机控件中。