Удаление всех QueryTables в Excel 2007 Workbook - PullRequest
1 голос
/ 25 марта 2011

Используя Excel Interop, я пытаюсь перебрать все QueryTables во всех рабочих листах и ​​удалить их. У меня есть этот код, который работает:

> // 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 Ответ

1 голос
/ 01 апреля 2011

Я выяснил проблему, благодаря этому сообщению. Оказывается, Excel Interop по-разному обрабатывает таблицы запросов в версиях Excel 2003 и 2007. В 2007 году используется ListObjects , поэтому используйте один и тот же код для циклического прохождения каждого рабочего листа, как описано выше, но затем используйте:

// loop through each list object on each Worksheet
if (sheet.ListObjects.Count > 0)
{
   foreach (ListObject obj in sheet.ListObjects)
   {
     obj.QueryTable.Delete();
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...