使用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。有没有人遇到这个问题?
答案 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();
}
}