2

Worksheet、Workbook、Range などの Excel オブジェクトは、Microsoft の相互運用アセンブリが参照されている場合、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 の記事を参照してください)。

.net メソッドInsertTable()を呼び出す VBA スクリプト (Excel マクロ) :

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 でこれを行う方法はありますか?

4

1 に答える 1

0

ライブラリ メソッドの最初の引数として、NO ラッパーの代わりにネイティブ プロキシを使用します。このようなもの:

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

    myBook.Dispose();
}
于 2015-02-13T15:48:46.630 に答える