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