gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 21:04:52 25 4
gpt4 key购买 nike

当引用 Microsoft 的互操作程序集时,可以将 Excel 对象(如 Worksheet、Workbook、Range 等)作为参数从 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 实用程序编译(参见 Newman's article 以获得很好的概述)。

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,因为这会导致编译错误。显然,无法使用 NetOffice 将 excel 对象作为参数传递。这是真的,还是有办法用 NetOffice 做到这一点?

最佳答案

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

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

myBook.Dispose();
}

关于.net - 使用 NetOffice 互操作时,无法将 excel 对象作为参数从 VBA 传递到 .NET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25699026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com