从VB.NET应用程序调用Excel时,如何让Excel出现在应用程序前面?
问题描述:
我有一个VB.NET应用程序,它使用Microsoft.Office.Interop.Excel来简单地打开一个电子表格,向其中抽取一些数据,刷新数据透视表中的数据,然后向用户显示电子表格。从VB.NET应用程序调用Excel时,如何让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登录”对话框,因此用户需要将ALT + TAB添加到Excel或单击任务栏中的Excel - 对用户来说这两者都不是很好的体验。我们希望登录对话框出现在呼叫应用程序的前面。
任何人都可以建议如何实现?我尝试将可见的& UserControl属性的设置移动到RefreshAll之后,但这没有任何区别。
干杯,
Chris。
答
对不起,C#,我不知道VB,所以我不能我自己翻译,但主要的想法是使用WinAPI的:
[DllImport("user32.dll", SetLastError = true)]
public static extern bool BringWindowToTop(IntPtr hWnd);
您可以从xlApp得到HWND:
BringWindowToTop((INtPtr)XlApp.Hwnd);
+0
谢谢亚历克斯 - 这是做的伎俩!在VB中它只是BringWindowToTop(CType(xlApp.Hwnd,IntPtr)) –
我们有类似的问题,并尝试了不同的方法。首先,您可以将windowState属性设置为XlMaximized(或XlNormal)。对于其他选项,您需要窗口句柄,并在有窗口句柄时将其告知onTop。但找到句柄并不容易...... Excel应用程序hwnd中有一个属性。此外,你可以从窗口形成工作簿 –