【问题标题】:How to run a hosted ironpython 1.1 from an Excel add-in?如何从 Excel 加载项运行托管的 Ironpython 1.1?
【发布时间】:2009-05-11 17:10:56
【问题描述】:

我正在编写一个托管 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 // 抛出上述异常

【问题讨论】:

  • 您是否尝试过通过 C# 执行您的 python 脚本正在执行的操作?那样有用吗?我知道,您说访问可以正常工作,但我只是想确定一下。
  • 我试过了。例如,这行 C# 打印单元格 A4 的值: Debug.WriteLine("C#: " + \ this.Range["A4", missing].Value2.ToString() );虽然这行 python 引发了上述异常: Debug.WriteLine("Python: " + \ sheet.Range["A4", Missing].Value2.ToString() ) 其中 'sheet' 是提供给托管 ironpython 引擎的变量.
  • 几个 Excel COM 方法和属性可以正常工作(Application.Visible 可以 IIRC),但大多数都失败了,除了提到的异常。我尝试做一个针对 Word 的类似项目,它似乎工作得很好。我正在运行 VS2008、Office2007、Vista SP1。

标签: excel com ironpython


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    基本上,我选择禁用包装 Excel COM 对象的 VSTO 代理。可以通过 AssemblyInfo.cs 中的这一行来完成:

    [程序集:ExcelLocale1033(false)]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-25
      • 1970-01-01
      相关资源
      最近更新 更多