从VB.NET应用程序调用Excel时,如何让Excel出现在应用程序前面?

When calling Excel from VB.NET app, how do I make Excel appear in front of app?

我有一个 VB.NET 应用程序,它使用 Microsoft.Office.Interop.Excel 来简单地打开一个电子表格,向其中输入一些数据,刷新数据透视表中的数据,然后将电子表格呈现给用户.

代码非常简单(未显示错误处理):

    ' Start Excel Application
    xlApp = New Excel.ApplicationClass

    ' Get Excel Workbooks 
    xlWorkBooks = xlApp.Workbooks

    ' Open workbook 
    xlWorkBook = xlWorkBooks.Open(Filename:=sExcelDocFullPath, IgnoreReadOnlyRecommended:=blnIgnoreReadOnly)

    If Not xlWorkBook Is Nothing Then

        ' Pump some data over (code not shown)
        ' Make the first worksheet in the document active
        CType(xlWorkBook.Worksheets(1), Excel.Worksheet).Activate()

        'Return control of Excel to the user
        xlApp.Visible = True
        xlApp.UserControl = True

        ' Refresh workbooks (with alerts off, so as not to hassle user )
        xlApp.DisplayAlerts = False
        xlWorkBook.RefreshAll()
    End If

当此代码为 运行 时发生的情况是 Excel 在调用应用程序后面打开,因为我们正在刷新数据连接,小 Excel "SQL Server Login" 对话框也显示在调用应用程序后面,因此用户需要 ALT+TAB 到 Excel 或单击任务栏中的 Excel - 这对用户来说都不是很好的体验。我们希望登录对话框出现在调用应用程序的前面。

任何人都可以建议如何实现这一目标吗?我试过将 Visible & UserControl 属性的设置移动到 RefreshAll 之后,但这没有任何区别。

干杯,

克里斯

对不起C#,我不懂VB,所以我无法自己翻译,但主要思想是使用WinAPI:

[DllImport("user32.dll", SetLastError = true)]
public static extern bool BringWindowToTop(IntPtr hWnd);

您可以从 xlApp 获取 hwnd:

BringWindowToTop((INtPtr)XlApp.Hwnd);