0

我正在使用 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
4

1 回答 1

0

我们曾经使用 Excel Interop,我记得它总是很难使用(笨拙。)由于 Interop 打开一个 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 回答