从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);
我有一个 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);