如何从Excel加载项运行托管的ironpython 1.1?
我正在编写一个承载IronPython 1.1的Excel加载项,我想 向PythonEngine实例提供Excel.COM应用程序对象 我的C#可以很好地访问COM对象的成员。然而,当我的 IronPython脚本访问COM对象的成员,我得到一个 System.ArgumentException:无法创建“System.Int32”类型的对象 已转换为类型“System.UInt32&” 下面是我托管IronPython 1.1的C#代码:如何从Excel加载项运行托管的ironpython 1.1?,excel,com,ironpython,Excel,Com,Ironpython,我正在编写一个承载IronPython 1.1的Excel加载项,我想 向PythonEngine实例提供Excel.COM应用程序对象 我的C#可以很好地访问COM对象的成员。然而,当我的 IronPython脚本访问COM对象的成员,我得到一个 System.ArgumentException:无法创建“System.Int32”类型的对象 已转换为类型“System.UInt32&” 下面是我托管IronPython 1.1的C#代码: public void ExecuteFile(st
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,您需要使用数据类型“索引”它;设置.Value2更方便(可以直接设置)。那么,如果在Python赋值中使用.Value2而不是.Value,会发生什么情况呢?这是一篇很好的文章,提供了一些解释和解决方案:
基本上,我选择禁用包装Excel COM对象的VSTO代理。可以使用AssemblyInfo.cs中的此行完成此操作:
[assembly:ExcelLocale1033(false)]您是否尝试过通过C#执行python脚本正在执行的操作?这样行吗?我知道,你说访问很好,但我只是想确定一下,我试过了。例如,这行C#打印单元格A4的值:Debug.WriteLine(“C#::“+\this.Range[“A4”,缺少].Value2.ToString());而这一行python抛出了提到的异常:Debug.WriteLine(“python:”+\sheet.Range[“A4”,缺少].Value2.ToString()),其中“sheet”是提供给托管ironpython引擎的变量。一些Excel COM方法和属性工作正常(Application.Visible是ok IIRC),但大多数都因提到的异常而失败。我试着做了一个类似的针对Word的项目,它似乎工作得很好。我正在运行VS2008、Office2007、Vista SP1。