工作表与工作表 (1),我不能从 .net 互操作中执行此操作吗?

Worksheets vs. Worksheets(1), can't I do this from .net interop?

我们的对象模型包含一个称为 Unit 的 class 和这些称为 Unit 的集合(存储在字典中)。这些对象具有唯一的名称和密钥(它们最初来自强制执行此操作的 SQL 数据库)所以我添加了:

Public Units(N as String) As Unit ...
Public Units(K as Integer) As Unit...

其中 return 来自 Units 集合的 Unit 对象。

在ExcelVBA中,可以用相似的方法引用大部分对象; Worksheets(1) return 是第一个 sheet,而 Worksheets("Bob") return 是命名的 sheet。但是他们还有一个额外的方法,Worksheets,它 return 是整个集合。好像他们有这个方法...

Public Worksheets() As List(Of Worksheet)

但是你不能在互操作中使用 List(对吗?)所以它更像是...

Public Worksheets() As ArrayList

那么我如何在 .net 中使用互操作来实现相同的基本 API?即有三种方法...

Public Units(N as String) As Unit ...
Public Units(K as Integer) As Unit...
Public Units() As ArrayList...

据我了解,仅导出给定名称的第一个方法(是否正确?)。那么 Excel 是如何做到的,我可以在 .net 中伪造它吗?

VBA的Worksheets不是方法。它是一个 class、Worksheets,有一个 default property Item 接受类型 Variant 的参数。没有重载(COM不支持),只是Variant既可以容纳数字也可以容纳字符串。

如果你想要VB.NET中的类似结构,你可以有一个实现default property as VB.NET understands it的集合class,这次你可以重载它。

Public Class UnitsCollection

    Default Public ReadOnly Property Item(ByVal i As Integer) As Unit
        Get
            Return ...
        End Get
    End Property

    Default Public ReadOnly Property Item(ByVal i As String) As Unit
        Get
            Return ...
        End Get
    End Property

End Class