2009-05-04 5 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 //私は.Valueのを設定することを信じて

+0

あなたのPythonスクリプトは、C#を通じてやっているやってみましたか?それは動作しますか?私は知っている、あなたはアクセスがうまくいくと言ったが、私はただ確実にしたい。 – Rohit

+0

私はそれを試みました。たとえば、このC#の行は、セルA4の値を出力します。 Debug.WriteLine( "C#:" + \ this.Range ["A4"、missing] .Value2.ToString() ); が 'シート' である場合:(.Value2.ToString() が[不足している、 "A4"] + \ sheet.Range "パイソン") Debug.WriteLine: は、Pythonのこのラインは、上述の例外をスローしているがホストされているIronpythonエンジンに提供される変数。 – Mads

+0

いくつかのExcel COMメソッドとプロパティは正常に動作します(Application.VisibleはIIRCです)。 Wordをターゲットにした同様のプロジェクトを試してみましたが、うまくいくようです。私はVS2008、Office2007、Vista SP1を実行しています。 – Mads

答えて

1

上記の例外がスローされますそれをデータ型で「索引付け」する必要があります。代わりに.Value2を設定する方が便利です(直接設定することもできます)。では、Pythonの代入で.Valueの代わりに.Value2を使用するとどうなりますか?

0

説明と溶液との良い記事はこちらです:

は基本的に、私はExcelのCOMオブジェクトをラップVSTOプロキシを無効にするために選びました。これは、AssemblyInfo.csで、この行を行うことができます。

[アセンブリ:ExcelLocale1033(偽)]

関連する問題