winforms 嵌入在winform中的excel,带有Windows API

pn9klfpd  于 2023-06-24  发布在  Windows
关注(0)|答案(1)|浏览(106)

我的代码:

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;

单击单元格没有响应!

bd1hkmkf

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应用程序的交互级别的应用程序。

相关问题