2011-03-24 229 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

相關問題