使用NetOffice互操作时,无法将excel对象作为参数从VBA传递到.NET
引用Microsoft互操作程序集时,Excel对象(如工作表、工作簿、范围等)可以作为参数从VBA传递到.net: .NET类:使用NetOffice互操作时,无法将excel对象作为参数从VBA传递到.NET,.net,excel,excel-interop,netoffice,vba,.net,Excel,Excel Interop,Netoffice,Vba,引用Microsoft互操作程序集时,Excel对象(如工作表、工作簿、范围等)可以作为参数从VBA传递到.net: .NET类: using Excel = Microsoft.Office.Interop.Excel; [ComVisible(true)] [ClassInterface(ClassInterfaceType.AutoDual)] public class MyExcelLib { public MyExcelLib() {} // default constru
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中的Register for COM Interop选项或使用Regasm实用程序编译(请参阅以获得良好的概述)
调用.net方法InsertTable()的VBA脚本(excel宏):
这是有效的;工作簿对象可以作为参数从VBA传递到.NET。但同一架构不适用于NetOffice程序集:
using Excel = NetOffice.ExcelApi;
using NetOffice.ExcelApi.GlobalHelperModules;
using NetOffice.ExcelApi.Enums;
据我所知,这些程序集的嵌入互操作类型属性不能设置为true,因为这会导致编译错误。显然,使用NetOffice无法将excel对象作为参数传递。这是真的吗,还是有办法用NetOffice做到这一点?在库方法中使用本机代理而不是NO wrapper作为第一个参数。大概是这样的:
public void InsertTable(object wbook, string TableName, ...)
{
Excel.Workbook myBook = new Excel.Workbook(null, wbook);
myBook.Dispose();
}
public void InsertTable(object wbook, string TableName, ...)
{
Excel.Workbook myBook = new Excel.Workbook(null, wbook);
myBook.Dispose();
}