删除Excel 2007工作簿中的所有QueryTable

时间:2011-03-24 21:45:49

标签: c# excel interop

使用Excel Interop,我试图遍历所有工作表中的所有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中通过“数据”选项卡创建的 - &gt;来自其他来源 - &gt;来自Microsoft Query。有没有人遇到这个问题?

1 个答案:

答案 0 :(得分: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();
   }
}