0

VB.NET を使用して Excel ファイルを開いていますが、毎回 Excel オブジェクトを作成したくありません。

私のコードはデバッグ モードで完全に動作しますが、発行後、既存のインスタンスを取得することはなく、タスク マネージャーから確認できる新しいインスタンスを常に作成します。これは、公開モードで常に false を返す私のコードです。

私のOSはWindows Server 2008です。これを解決する方法を教えてください。

Function IsExcelRunning() As Boolean
        Dim xlApp As Excel.Application
        On Error Resume Next
        xlApp = GetObject(, "Excel.Application")
        IsExcelRunning = (Err.Number = 0)
        MyHelper.writeLog("Excel Instance found=" & IsExcelRunning)
        xlApp = Nothing
        Err.Clear()
End Function

これが私が呼び出す方法です。

  If IsExcelRunning() Then
        excelApp = GetObject(, "Excel.Application")
  Else
       excelApp = Server.CreateObject("Excel.Application")
  End If
4

1 に答える 1

0

以前は Excel 相互運用機能を使用していましたが、常に操作が難しい (扱いにくい) ことを覚えています。相互運用機能が Excel プロセスを開き、使用するたびに閉じるわけではないため、操作が難しくなります。

Interop は Excel を自動的に開くので、閉じるだけで済みました。これは、プロセスを強制終了するために使用していたものです。YourProcessName を Excel.exe に置き換えます。

Dim proc As System.Diagnostics.Process
Dim info As ManagementObject
Dim search As New ManagementObjectSearcher("SELECT ProcessId FROM Win32_process WHERE caption = 'YourProcessName'")
For Each info In search.Get()
    Dim TheString As String = info.GetText(TextFormat.Mof).ToString
    proc = System.Diagnostics.Process.GetProcessById(Mid$(TheString, _
                                                    (Len(TheString) - 8), 4))
    proc.CloseMainWindow()
    proc.Refresh()
    If proc.HasExited Then GoTo NoKill
    proc.Kill()
NoKill:
Next

インポートする必要があります

Imports System.Management

また、参照「System.Management」をプロジェクトに追加する必要があります。

プロジェクトへの参照の追加については、 http : //msdn.microsoft.com/en-us/library/vstudio/wkze6zky.aspxを参照してください。

CSV で作業できる場合は、試してみることをお勧めします。自分で Excel ファイルを作成している場合は、Excel に作成/エクスポートできるレポート作成者を探してみてください。長期的には多くの時間を節約できます。

于 2013-10-06T01:18:02.983 に答える