2009-05-04 42 views
0

我正在編寫託管IronPython 1.1的Excel加載項,我想要 將Excel.Application COM對象提供給PythonEngine實例。如何從Excel加載項運行託管的Ironpython 1.1?

我的C#可以很好地訪問COM對象的成員。但是,當我的IronPython腳本訪問COM對象的成員時,我得到一個 「System.ArgumentException:類型'System.Int32'的對象不能被 轉換爲'System.UInt32 &'類型。

這裏是託管IronPython的1.1我的C#代碼:

public void ExecuteFile(string path) { 
    // see if COM object works 
    Debug.WriteLine(Globals.ThisAddIn.Application.ActiveWindow.Caption); 

    engine.Globals.Add("excel", Globals.ThisAddIn.Application); 

    try 
    { 
     engine.ExecuteFile(path); 
    } 
    catch (Exception ex) 
    { 
     Debug.WriteLine(ex); 
    } 
} 

,這裏是我的IronPython的測試腳本:

excel.ActiveSheet.Range['A1'].Value2 = 42 //拋出上述

+0

您是否嘗試過做什麼,你的Python腳本通過C#在做什麼?那樣有用嗎?我知道,你說訪問正常,但我只是想確定。 – Rohit 2009-05-04 16:04:51

+0

我試過了。例如,這行C#打印單元格A4的值: Debug.WriteLine(「C#:」+ \ this.Range [「A4」,missing.Value2.ToString() ); 雖然這種線蟒拋出提到異常: 的Debug.WriteLine( 「Python中:」 + \ sheet.Range [ 「A4」,缺少] .Value2.ToString() ) 其中 '片' 是一個提供給託管蟒蛇引擎的變量。 – Mads 2009-05-05 08:14:12

+0

一些Excel COM方法和屬性可以正常工作(Application.Visible是可以的IIRC),但是大多數都會失敗,並提到異常。我試圖做一個類似的項目針對Word,它似乎工作得很好。我正在運行VS2008,Office2007,Vista SP1。 – Mads 2009-05-05 08:14:19

回答

1

我認爲,設置.value的提到的例外你需要用數據類型「索引」它;設置.Value2更方便(可直接設置)。那麼如果在Python賦值中使用.Value2而不是.Value會發生什麼?

0

一篇好文章有解釋和解決方案是在這裏:

基本上,我選擇了禁用它包裝Excel的COM對象VSTO代理。它可以與該行的AssemblyInfo.cs來完成:

[裝配:ExcelLocale1033(假)]