我正在构建一个"从Excel导入"功能.它必须位于DLL中,从非MFC应用程序调用.必须提供电子表格的图像,用户可以拖动选择框(选择单元格),然后单击"导入"按钮,并发生正确的事情.无法获取电子表格,在其旁边有一个按钮,并在DLL中发生.
我在DLL中进入了MFC对话框的路径,但在尝试在对话框的窗口上为excel启动OLE客户端时被阻止.只有支持我发现使用OLE显示Excel需要SDI.我能够使自动化功能起作用,我可以读取单元格并在我的对话框上绘制它们的"假图像"......但我担心这将不符合我的要求.
所以我尝试创建一个SDI.我能够创建一个SDI,将Excel作为OLE客户端.我能够处理"选择更改"事件,并获取我需要的单元格数据.在这一点上我被挫败了两件事:
无法使此SDI在MFC DLL中工作.在CWinApp构造函数中崩溃,断言AfxGetThread不为null.将"theApp"移动到单个导出的DLL函数中的本地作用域,但仍然无法使其工作,但具有不同的症状:添加AFX_MANAGE_STATE时崩溃(AfxGetStaticModuleState()); 导出DLL函数,如果我没有使用它,则从未输入OnInitInstance.尝试添加对应用程序的Run()函数的调用,但这没有帮助.如果有人认为他们知道问题是什么,我可以发布此代码.
Excel客户端项目处于活动状态时无法显示工具栏.我可以把我的"导入"(和其他选项)放在顶部的菜单栏上,但这不够明显.即使是浮动工具栏也已关闭.它是有意义的,它会这样做,因为有一个工具栏存在无法对当前活动的项目采取行动会令人困惑...但在我的情况下,这是一个问题.
所以现在我想我需要回到对话框方法,并嵌入一个ActiveX控件来调出excel电子表格文件进行导入.
必须允许我处理选择更改事件,或者必须允许我查找选择的单元格(或者如果单击对话框中的"导入"按钮导致选定的单元格未被选中,则最近选择了这些单元格.
它还必须具有合理的许可条款,因为这将用于广泛向公众提供的商业应用程序中.
如果有人知道我试过的任何一种方法的"快速修复",那也是有用的.
希望可以有人帮帮我!