如何从Excel加载项运行托管的ironpython 1.1?

时间:2009-05-04 11:34:22

标签: excel com ironpython

我正在编写一个托管IronPython 1.1的Excel加载项,我想这样做 将Excel.Application COM对象提供给PythonEngine实例。

我的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 //抛出上面提到的异常

2 个答案:

答案 0 :(得分:1)

我相信要设置.Value,你需要用数据类型“索引”它;设置.Value2更方便(可以直接设置)。那么如果在Python赋值中使用.Value2而不是.Value会发生什么呢?

答案 1 :(得分:0)

这里有一篇包含解释和解决方案的好文章:

http://codeidol.com/csharp/c-sharp-in-office/Working-with-Excel-Objects/Special-Excel-Issues/

基本上,我选择禁用包装Excel COM对象的VSTO代理。可以在AssemblyInfo.cs中使用此行完成:

[assembly:ExcelLocale1033(false)]