Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Процедуры в этом разделе описывают, как выполнить цикл по книгам Excel в папке или цикл по таблицам в книге Excel с помощью контейнера «цикл по каждому элементу» с соответствующим перечислителем.
Организация цикла по файлам Excel с помощью перечислителя с циклом по каждому файлу
Создайте строковую переменную, которая будет принимать значение текущего пути и имени файла Excel для каждой итерации цикла. Чтобы избежать проверки данных, присвойте переменной в качестве начального значения путь и имя существующего файла Excel. (Образец выражения, показанный ниже, использует в этой процедуре переменную ExcelFile.)
При желании создайте другую строковую переменную, которая будет хранить значение аргумента для дополнительных свойств строки соединения с Excel. Этот аргумент содержит серию значений, которые задают версию Excel и определяют, будет ли первая строка содержать имена столбцов и будет ли использован режим импорта. (Образец выражения, показанный ниже, использует в этой процедуре имя переменной ExtProperties с начальным значением "Excel 8.0;HDR=Yes".)
Если в аргументе расширенных свойств не используется переменная, то в выражение, которое содержит строку подключения, ее необходимо добавить вручную.
Добавьте контейнер «цикл по каждому элементу» к вкладке Поток управления. Сведения о настройке контейнера «цикл по каждому элементу» см. в разделе Настройка контейнера «цикл по каждому элементу».
На странице Коллекция в редакторе циклов по каждому элементу выберите перечислитель с циклом для каждого файла, задайте папку, в которой будет размещена книга Excel и файловый фильтр (обычно *.xls).
На странице Сопоставление переменной сопоставьте Index 0 со строковой переменной, определенной пользователем, которая будет принимать значение текущего пути Excel и имени файла на каждой итерации цикла. (Образец выражения, показанный ниже, использует в этой процедуре переменную ExcelFile.)
Закройте Редактор циклов по каждому элементу.
Добавьте диспетчер соединений с Excel к пакету, описанному в разделе Добавление, удаление или совместное использование диспетчера соединений в пакете. Чтобы избежать ошибок проверки, выберите для подключения существующий файл книги Excel.
Важно!Чтобы избежать ошибок проверки после настройки задач и компонентов потоков данных, которые используют этот диспетчер соединений Excel, назначьте существующую книгу Excel в Редакторе диспетчера соединений Excel. Диспетчер соединений не будет использовать эту книгу в процессе выполнения, если настроить выражение для свойства ConnectionString, как показано ниже. После создания и настройки пакета можно очистить значение свойства ConnectionString в окне свойств. Однако если очистить это значение, свойство строки соединения диспетчера соединений Excel не будет действительно до запуска контейнера «цикл по каждому элементу». Следовательно, необходимо присвоить свойству DelayValidation значение True в задачах, где используется диспетчер соединений, или в пакете, чтобы избежать ошибок проверки.
Необходимо также использовать значения по умолчанию False для свойства RetainSameConnection диспетчера соединений Excel. При изменении этого значения на True каждая итерация цикла будет по-прежнему открывать первую книгу Excel.
Выберите новый диспетчер соединений с Excel, щелкните свойство Выражения в окне свойств и нажмите кнопку обзора.
В редакторе выражений свойств выберите свойство ConnectionString и нажмите кнопку обзора.
В построителе выражения введите следующее выражение.
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + @[User::ExcelFile] + ";Extended Properties=\"" + @[User::ExtProperties] + "\""Обратите внимание на использование escape-символа «\» для обозначения внутреннего знака вопроса, требуемого около значения аргумента расширенных свойств.
Аргумент расширенных свойств является обязательным. Если для этого значения не используется переменная, то его необходимо вручную добавить в выражение, как в следующем примере для файла Excel 2003.
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + @[User::ExcelFile] + ";Extended Properties=Excel 8.0"Создайте задачи в контейнере «цикл по каждому элементу», которые используют диспетчер соединений с Excel для выполнения одинаковых операций для каждой книги Excel, соответствующей заданному положению и шаблону файла.
Организация цикла по таблицам Excel с помощью перечислителя по набору строк схемы ADO.NET
Создайте диспетчер соединений ADO.NET, который использует поставщик Microsoft Jet OLE DB для подключения к книге Excel. На странице «Все» диалогового окна Диспетчер соединений убедитесь, что в качестве значения дополнительных свойств введено Excel 8.0. Дополнительные сведения см. в разделе Добавление, удаление или совместное использование диспетчера соединений в пакете.
Создайте строковую переменную, которая будет принимать имя текущий таблицы на каждой итерации цикла.
Добавьте контейнер «цикл по каждому элементу» к вкладке Поток управления. Сведения о настройке контейнера «цикл по каждому элементу» см. в разделе Настройка контейнера «цикл по каждому элементу».
На странице Коллекция в редакторе циклов по каждому элементу выберите перечислитель набора строк схемы ADO.NET.
В качестве значения Соединения выберите предварительно созданный диспетчер соединений ADO.NET.
В качестве значения Схема выберите «Таблицы».
ПримечаниеСписок таблиц в книге Excel включает в себя и листы (которые имеют суффикс $), и именованные диапазоны. Если нужно отфильтровать список только по листам или только по именованным диапазонам, то, возможно, для этой цели понадобится написать свою программу в задаче «Скрипт». Дополнительные сведения см. в разделе Работа с файлами Excel в задаче «Скрипт».
На странице Сопоставления переменных сопоставьте Index 2 со строковой переменной, созданной ранее для хранения имени текущей таблицы.
Закройте Редактор циклов по каждому элементу.
Создайте задачи в контейнере «цикл по каждому элементу», которые используют диспетчер соединений Excel для выполнения одинаковых операций для каждой таблицы Excel в заданной книге. Если задача «Скрипт» используется для анализа имени таблицы перечислителя или работы с каждой таблицей, не забудьте добавить строковую переменную к свойству ReadOnlyVariables задачи «Скрипт».
См. также
Задания
Настройка контейнера «цикл по каждому элементу»
Добавление или изменение выражение свойства
Работа с файлами Excel в задаче «Скрипт»