我正在编写一个托管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
//抛出上面提到的异常
答案 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)]