我的代码:
public void ImplantFile1(IntPtr hwnd, string fileName = "")
{
try
{
MoveWindow(hwnd, 0, 0, 0, 0, true);
SetParent(hwnd, this.Handle.ToInt32());
int top = -40;
if (Tool.IsSuffixFile(fileName, Const.Suffix_Excel))
{
top = -40;
}
else if (Tool.IsSuffixFile(fileName, Const.Suffix_Word))
{
top = -32;
}
MoveWindow(hwnd, 0, top, this.Bounds.Width, this.Bounds.Height + Math.Abs(top), true);
}
catch(Exception ex)
{ }
}
回调函数:
ImplantFile1(Excel.Application.IntPtr ,"C:\cool.xlsx");
enter image description here
Excel成功嵌入winform!当我设置
ExcelApp.EnableEvents = true;
单击单元格没有响应!
1条答案
按热度按时间bd1hkmkf1#
如果您使用SetParent函数将Excel嵌入到WinForms应用程序中(如前面的响应中所述),则可能会遇到Excel不响应用户交互(如单击单元格)的问题。这是因为以这种方式嵌入Excel可能无法提供与嵌入式Excel应用程序的完全交互性。
使用SetParent嵌入Excel时,Excel应用程序实际上是在WinForms应用程序窗口的上下文中运行。这可能导致无法正确捕获和处理用户输入事件。
要克服此限制并实现与嵌入式Excel应用程序的完全交互,您可能需要探索其他方法。以下是您可以考虑的几个选项:
使用Excel Web Browser控件:Excel Web Browser控件允许您使用类似Web浏览器的界面将Excel工作簿直接嵌入到WinForms应用程序中。这提供了更无缝的集成,并允许与嵌入式Excel工作簿进行完全交互。
使用第三方库或控件:有一些第三方库和控件可以提供更高级和功能丰富的选项,用于将Excel功能嵌入到WinForms应用程序中。这些库通常为交互性提供更好的支持,并提供更集成的体验。
在单独的进程中启动Excel:您可以在单独的进程中启动Excel,并使用自动化或进程间通信机制与之通信,而不是将Excel直接嵌入到WinForms应用程序中。这允许您以编程方式控制Excel并与之交互,同时将其与WinForms应用程序分开。
这些方法中的每一种都有其自身的优点和考虑。选择最适合您的要求以及与嵌入式Excel应用程序的交互级别的应用程序。