2016-03-24 12 views
3

Bazı Excel görevlerini otomatikleştirmek için F # kullanıyorum. Aslında iki sorunum var: 1. Bir Excel.Application örneği kullanarak bir çalışma kitabını açarsam, Excel'de çalışma kitabını açmış olsaydım otomatik olarak yüklenecek olan tüm eklentileri özlerdim. Bu nedenle, çalışma kitabını önce tüm eklentiler yüklü olan Excel'de açmaya çalışıyorum ve örneği F # 'ye teslim ediyorum. Daha sonra ikinci sayıyı aldım: 2. Marshal.GetActiveObject ("Excel.Application") aslında varolan örneği almak yerine yeni bir örnek açar.F # Excel Interop: Marshal.GetActiveObject ("Excel.Application") çalışmıyor

#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 

ve çıkış: kod aşağıda

val uygulaması: obj

val app1: Excel.Application

val wb: Excel.Workbook = null

val görünür: bool = false

val n: int = 0

Ama eminim ki çalışan bir Excel örneğim var ve görülebilir. Teşekkürler!

+1

[Excel birlikte yükleme XLLs ve DLL'leri yükleme] gördünüz mü (http://stackoverflow.com/questions/13567512/excel-interop-loading-xlls-and-dlls) Excel'im yok bu yüzden test edemiyorum F # için. –

+0

@GuyCoder: Bu yazıya işaret ettiğiniz için çok teşekkür ederim! Sorunumu çözebiliyor gibi görünüyor, ama sindirmek için biraz zamana ihtiyacı var. Aslında bazı manuel operasyonlar yapmaktan sakınmıyorum, eğer işe yarayabilirse ikinci yaklaşımımı tercih ederim. Neden işe yaramazsa mantıksız görünüyor. – xiphoid

cevap

1

Kodumu iki kez kontrol ettim ve bu, Excel'i F # betiğinden kullanma yoludur (diğer durumlar için Excel-DNA'yı kullanın). Ancak, çok sık (özellikle eklentileri kullanırken) Excel düzgün kapanmaz ve bazı yarı ölü Excel işlemleri, el ile öldürülene kadar görev yöneticisine asılır. Muhtemelen yanlış bir süreç alıyorsunuz, çalışma kitabınızı açtığınız değil.

+0

Çok teşekkür ederim! Sadece bir Excel işlemi çalıştırıldığında kod çalışır! Bu şimdi benim için yeterince iyi. – xiphoid

İlgili konular