Ich versuche, F # zu verwenden, um einige Excel-Aufgaben zu automatisieren. Ich habe tatsächlich zwei Probleme: 1. Wenn ich eine Arbeitsmappe mit einer Excel.Application-Instanz öffne, würde ich alle Add-Ins vermissen, die automatisch geladen worden wären, wenn ich gerade die Arbeitsmappe in Excel geöffnet hätte. Also versuche ich zuerst die Arbeitsmappe in Excel zu öffnen, mit allen Add-Ins geladen, und dann die Instanz an F # übergeben. Dann habe ich das zweite Problem: 2. Das Marshal.GetActiveObject ("Excel.Application") öffnet tatsächlich eine neue Instanz, anstatt die vorhandene Instanz zu erhalten. Der Code ist unten:F # Excel-Interop: Marshal.GetActiveObject ("Excel.Application") funktioniert nicht
#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
und der Ausgang ist:
val App: obj
val app1: Excel.Application
val wb: Excel.Workbook = null
Wert sichtbar: bool = falsch
val n: int = 0
Aber ich bin mir sehr sicher, ich habe eine Excel-Instanz ausgeführt und es ist sichtbar. Vielen Dank!
Haben Sie gesehen [Excel-Interop Laden XLLs und DLLs] (http://StackOverflow.com/Questions/13567512/Excel-Interop-Loading-Xlls-and-Dlls) Ich habe kein Excel, so dass ich nicht testen kann es für F #. –
@GuyCoder: Vielen Dank für den Hinweis auf diesen Beitrag! Es scheint in der Lage zu sein, mein Problem zu lösen, braucht aber etwas Zeit zu verdauen. Es macht mir eigentlich nichts aus, manuell zu arbeiten, also würde ich meinen zweiten Ansatz bevorzugen, wenn es funktionieren könnte. Es sieht einfach unvernünftig aus, warum es nicht funktioniert. – xiphoid