2013-06-05 96 views
3

試圖做到這一點:F#2.0的Silverlight 5,和Excel互操作

let excel = AutomationFactory.CreateObject "Excel.Application" 
excel?Visible <- true 
excel?workbooks?Add() 

雖然EXCEL.EXE會出現在任務管理器中,當我運行的代碼中,excel對象顯然沒有屬性,這使得其餘的代碼很難執行。 (如果我在第一行之後放置let allProps = excel.GetType().GetProperties(BindingFlags.Public ||| BindingFlags.NonPublic),它將計算爲一個空的PropertyInfo數組。)

在我見過的Silverlight/Excel互操作示例中,每個人都只是做我想做的事情,沒有任何問題。不知道爲什麼我有這個問題......?

+0

你能告訴我們以下版本的Excel,.NET和F#嗎?我還看到您正在使用動態操作符(?with < - )它用作動態方法和屬性調用的操作符。你必須提供你自己的實現,你做到了嗎? – ninegrid

+0

Excel 2007,.NET 4,以及此問題的標題中所述的F#2.0。 是的,我編寫了動態setter,但又一次'excel.GetType()。GetProperties()'返回一個空數組。我對'?< - '的暗示應該與此無關。 – MiloDC

回答

0

AutomationFactory.CreateObject創建一個自動化服務器,該服務器旨在通過動態分派來使用。 http://msdn.microsoft.com/en-us/library/ff457794(v=vs.95).aspx。對我來說,這是有道理的,因爲可用的屬性將由被自動化的對象定義。

使用object.GetType()。GetProperties()只會給你對象的預編譯屬性,而不是動態屬性。

如果您正在自動化Excel以創建電子表格,那麼使用不使用Excel自動化的第三方庫可能會更容易。它們中的很多都列在這個答案中:Create Excel (.XLS and .XLSX) file from C#