工作表与工作表 (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
我们的对象模型包含一个称为 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