什么是这个VBA代码的C#等价物?

我有这个VBA代码刷新Excel工作表上的数据连接,我正在更新代码有点像C#的可靠性,而不是Visual Basic …

所以我的问题是这个VBA代码的C#等价物是什么:

Set wb = Workbooks.Open(fileName, 0, True) wb.Connections(baseName & " POS Report").OLEDBConnection.BackgroundQuery = False wb.RefreshAll wb.Connections(baseName & " POS Report").OLEDBConnection.BackgroundQuery = True 

我已经尝试了在C#中的逻辑等价物,但它不工作…任何帮助,非常感谢!

我有基础知识:

 Application excel = new Application(); Workbook ob = excel.Workbooks.Open(eBook[i], 0, true); ob.Connections(baseName + " POS Report").OLEDBConnection.BackgroundQuery = true; 

这里的错误来自Connections ,它说:“不可调用的memer'Microsoft.Office.Interop.Excel._Workbook.Connections'不能像一个方法使用”

Workbooks.Open返回一个Workbook ,其中包含Connections集合的Connections成员。 您可以使用Item方法访问这些连接的单个项目。

所以它应该看起来像这样:

 ob.Connections.Item(baseName + " POS Report").OLEDBConnection.BackgroundQuery = true; 

在VB中,你被允许指定一个类的属性或方法作为“默认”成员。 然后,您可以使用该类的实例的任何标识符“as-if”作为方法名称,并自动调用/访问默认成员。

在这种情况下, Connections是一个集合,几乎所有VBA集合类的默认成员都是一个名为Item的方法,它通过索引(数字或名称)返回指定的项目。 所以,在VB中,这两个是等价的:

 WorkbookConnection x = wb.Connections("foo") WorkbookConnection x = wb.Connections.Item("foo") 

C#没有相同的默认成员的概念,所以你不能使用第一种语法。 第二个语法只是普通的成员访问,所以它工作正常。