У меня есть приложение VB.NET, которое использует Microsoft.Office.Interop.Excel, чтобы просто открыть электронную таблицу, перекачать некоторые данные в нее, обновить данные в сводных таблицах и затем представить пользователю таблицу.При вызове Excel из приложения VB.NET как сделать 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» в панели задач - ни один из них не является отличным опытом для пользователя. Нам нужно, чтобы диалоговое окно Login появилось в обратном направлении вызывающего приложения.
Может ли кто-нибудь предложить, как это может быть достигнуто? Я попытался переместить настройки свойств Visible & UserControl после RefreshAll, но это не имеет никакого значения.
Cheers,
Chris.
У нас схожие проблемы и мы пробовали разные подходы. Во-первых, вы можете установить свойство windowState для XlMaximized (или XlNormal). Для других опций вам нужен дескриптор окна и, когда он есть, сообщает ему, что он включен. Но найти дескриптор непросто ... В приложении Excel есть свойство hwnd. Кроме того, вы могли бы получить окна из книги –