以前的Excel实例无法通过IIS

时间:2013-10-05 06:58:36

标签: vb.net excel iis

我使用VB.NET打开Excel文件,但不想每次都创建excel对象。

我的代码在调试模式下完美运行,但在发布之后,它永远不会获取现有实例,并始终创建我们可以从任务管理器中看到的新实例。这是我的代码,它在发布模式下总是返回false。

我的操作系统是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

1 个答案:

答案 0 :(得分:0)

我们过去常常使用Excel Interop,我记得它总是难以使用(笨重)。由于Interop打开Excel进程而不是每次使用它都关闭它,因此难以使用。

Interop会自动打开Excel,所以我们需要做的就是关闭它。这是我们过去用来杀死进程的东西。用Excel.exe替换YourProcessName。

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的报表创建者。从长远来看,你会节省很多时间。