2011-03-24 233 views
1

使用Excel Interop,我试图遍历所有工作表中的所有QueryTable并删除它们。我有了这个代码,它的工作原理:在Excel 2007工作簿中删除所有QueryTable

> // loop through each Worksheet 
> for (int i = 1; i <= workbook.Sheets.Count; i++) 
> { 
>  sheet = (Worksheet)workbook.Sheets.get_Item(i); 
> 
>  // loop through each queryTable on each Worksheet 
>  int queryTableCount = sheet.QueryTables.Count; 
>  for (int j = 1; j <= queryTableCount; j++) { 
>  sheet.QueryTables.Item(1).Delete(); 
>  } 
> } 

这对于一些数据连接/文件,但对于其他的“QueryTables.Count”返回零工作得很好 - 尽管我知道有连接。连接是在Excel 2007中通过数据选项卡 - >从其他源 - >从Microsoft Query中创建的。有没有人遇到这个问题?

回答

1

我想通过this post.得知这个问题,事实证明,Excel Interop在2003和2007版Excel中处理查询表的方式不同。 2007使用ListObjects,所以通过类似上面的每个工作表使用相同的代码循环,但再使用:

// loop through each list object on each Worksheet 
if (sheet.ListObjects.Count > 0) 
{ 
    foreach (ListObject obj in sheet.ListObjects) 
    { 
    obj.QueryTable.Delete(); 
    } 
} 
+0

似乎在VBA不同的方式处理它们。列举Listobjects也在那里工作。 – pauliephonic 2011-04-01 11:56:32

相关问题