2014-09-06 29 views
2

像工作表,工作簿,范围等Excel对象可以从VBA传递时,.NET作为参数时,微软的互操作程序集引用到.NET:无法通过Excel对象从VBA参数使用NetOffice互操作

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

..compiled与注册为COM Interop选项,在Visual Studio中,或与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; 

据我了解,在嵌入互操作类型,这些组件的属性不能设置为true,因为这会导致编译错误。显然,使用NetOffice无法将excel对象作为参数传递。这是真的,还是有办法使用NetOffice做到这一点?

回答

0

使用本地代理而不是NO封装器作为库方法中的第一个参数。类似这样的:

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

    myBook.Dispose(); 
}