Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用NetOffice互操作时,无法将excel对象作为参数从VBA传递到.NET_.net_Excel_Excel Interop_Netoffice_Vba - Fatal编程技术网

使用NetOffice互操作时,无法将excel对象作为参数从VBA传递到.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

引用Microsoft互操作程序集时,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中的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();
}