Невозможно передать объекты Excel в качестве параметров из VBA в.NET при использовании взаимодействия NetOffice

Объекты Excel, такие как Worksheet, Workbook, Range и т. Д., Могут быть переданы из VBA в.net в качестве параметров при ссылке на сборку взаимодействия Microsoft:

.NET класс:

using Excel = Microsoft.Office.Interop.Excel;

[ComVisible(true)]
[ClassInterface(ClassInterfaceType.AutoDual)]
public class MyExcelLib
{
    public MyExcelLib() {}  // default constructor

    public void InsertTable(Excel.Workbook wbook, string TableName, ...)
    {
       ...
    }
}

..скомпилировано с опцией Register for COM Interop в Visual Studio или с утилитой Regasm (хороший обзор см. в статье Newman).

Сценарий VBA (макрос Excel), вызывающий метод.net InsertTable ():

Dim xLib As New MyExcelLib
Call xLib.InsertTable(ThisWorkbook, "Price", ..)

Это работает; Объект книги может быть передан из VBA в.NET в качестве параметра. Но та же схема не работает со сборками NetOffice:

using Excel = NetOffice.ExcelApi;
using NetOffice.ExcelApi.GlobalHelperModules;
using NetOffice.ExcelApi.Enums;

Насколько я понимаю, свойство Embed Interop Types этих сборок не может быть установлено в true, потому что это вызывает ошибки компиляции. По-видимому, невозможно передать объекты Excel в качестве параметров с помощью NetOffice. Это правда или есть способ сделать это с NetOffice?

1 ответ

Используйте собственный прокси вместо оболочки NO в качестве первого аргумента в методе вашей библиотеки. Что-то вроде этого:

public void InsertTable(object wbook, string TableName, ...)
{
    Excel.Workbook myBook = new Excel.Workbook(null, wbook);

    myBook.Dispose();
}
Другие вопросы по тегам