1

Microsoft.Office.Interop.Excel を使用してスプレッドシートを開き、そこにデータを送り込み、ピボット テーブルのデータを更新して、ユーザーにスプレッドシートを表示する VB.NET アプリケーションがあります。

コードは非常に単純です (エラー処理は示されていません)。

    ' 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 をクリックします。どちらもユーザーにとって優れたエクスペリエンスではありません。呼び出し元のアプリの前にログイン ダイアログが表示されるようにします。

これを達成する方法を誰かが提案できますか? Visible & UserControl プロパティの設定を RefreshAll の後に移動しようとしましたが、違いはありません。

乾杯、

クリス。

4

1 に答える 1

2

C# については申し訳ありませんが、私は VB を知らないので、自分で翻訳することはできませんが、主なアイデアは WinAPI を使用することです。

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

xlApp から hwnd を取得できます。

BringWindowToTop((INtPtr)XlApp.Hwnd);
于 2016-01-07T17:11:24.843 に答える