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

时间:2014-04-08 16:55:23

标签: c# excel vba excel-vba

我有这个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'不能像方法一样使用"

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

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

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

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

C#与默认成员的概念不同,因此您无法使用第一种语法。第二种语法只是普通的成员访问,所以它工作正常。