我正在尝试使用F#自动执行某些Excel任务。我实际上有两个问题: 1.如果我使用Excel.Application实例打开工作簿,如果我刚刚在Excel中打开工作簿,我将错过所有自动加载的加载项。所以我首先尝试在Excel中打开工作簿,加载所有加载项,然后将实例交给F#。然后我得到了第二个问题: 2. Marshal.GetActiveObject(“Excel.Application”)实际上打开一个新实例,而不是获取现有实例。代码如下:
#r "Microsoft.Office.Interop.Excel"
#r "office"
open Microsoft.Office.Interop
open System
open System.Runtime.InteropServices
let app = Marshal.GetActiveObject("Excel.Application")
let app1 = app :?> Excel.Application
let wb = app1.ActiveWorkbook
let visible = app1.Visible
let n = app1.Workbooks.Count
,输出为:
val app:obj
val app1:Excel.Application
val wb:Excel.Workbook = null
val visible:bool = false
val n:int = 0
但我非常确定我有一个Excel实例正在运行并且它是可见的。谢谢!
答案 0 :(得分:1)
我已经仔细检查了我的代码,这是从F#脚本中使用Excel的方法(在其他情况下使用Excel-DNA)。但是,经常(特别是在使用加载项时)Excel无法正常关闭,并且一些半死的Excel进程会在任务管理器中挂起,直到它们被手动终止。可能你得到了一个错误的过程,而不是你打开工作簿的过程。