Как запустить размещенный Ironpython 1.1 из надстройки Excel? - PullRequest
0 голосов
/ 04 мая 2009

Я пишу надстройку для Excel, которая содержит IronPython 1.1, и я хочу предоставить COM-объект Excel.Application экземпляру PythonEngine.

Мой C # может нормально обращаться к членам COM-объекта. Тем не менее, когда мой Сценарий IronPython обращается к членам COM-объекта, я получаю "System.ArgumentException: объект типа 'System.Int32' не может быть преобразован в тип 'System.UInt32 &'. "

Вот мой C # код хостинга IronPython 1.1:

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 ]

1 голос
/ 04 мая 2009

Я считаю, что для установки .Value вам нужно «проиндексировать» его с типом данных; вместо этого удобнее установить .Value2 (его можно установить напрямую). Так что же произойдет, если вы используете .Value2 вместо .Value в этом назначении Python?

0 голосов
/ 11 мая 2009

Хорошая статья с объяснениями и решением здесь:

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

По сути, я выбрал отключение прокси-сервера VSTO, который оборачивает COM-объект Excel. Это можно сделать с помощью этой строки в AssemblyInfo.cs:

[сборка: ExcelLocale1033 (false)]

...