使用NetOffice互操作时,无法将excel对象作为参数从VBA传递到.NET

时间:2014-09-06 09:55:06

标签: .net excel excel-vba excel-interop netoffice vba

当引用Microsoft的互操作程序集时,Excel工件,工作簿,范围等Excel对象可以作为参数从VBA传递到.net:

.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, ...)
    {
       ...
    }
}

..在Visual Studio中使用注册COM Interop 选项编译,或使用Regasm实用程序编译(请参阅Newman's article以获得一个很好的概述)。

VBA脚本(excel宏)调用.net方法 InsertTable()

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

这有效; Workbook对象可以作为参数从VBA传递给.NET。但是相同的模式不适用于NetOffice程序集:

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

据我所知,这些程序集的 Embed Interop Types 属性不能设置为true,因为这会导致编译错误。显然,使用NetOffice无法将excel对象作为参数传递。这是真的吗,还是有办法用NetOffice做到这一点?

1 个答案:

答案 0 :(得分:0)

使用本机代理而不是NO包装器作为库方法中的第一个参数。像这样:

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

    myBook.Dispose();
}