2011-03-24 10 views
1

Excel Interopを使用して、すべてのワークシートのすべてのQueryTableをループして削除しようとしています。私は接続があることを知っているにもかかわらず - これは、いくつかのデータ接続/ファイルのためうまく動作しますが、他人のために「QueryTables.Countは、」ゼロを返し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(); 
>  } 
> } 

:私はこのコード、作品を持っています。接続は、データタブ - >その他のソース - > Microsoft QueryからExcel 2007で作成されました。誰もこの問題に遭遇しましたか?

答えて

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で異なってそれらを処理するようです。リストオブジェクトを列挙することもそこで働いた。 – pauliephonic

関連する問題