Контейнер цикла Forex служб SSIS не перебирает файлы Excel - PullRequest
5 голосов
/ 26 марта 2019

Контейнер цикла по каждому элементу в моем процессе не помещает новое имя файла в установленную переменную. Он проходит через процесс столько раз, сколько файлов соответствует критериям, мне просто нужно, чтобы имя файла было динамическим.

Я создал имя переменной, которая содержит полный путь к файлу первого файла в моем нужном каталоге. Выглядит примерно как C:\Somepath\ExcelFile.xlsx Я также создал имя переменной ExtProperties для использования в ConnectionString со значением "Excel 12.0;HDR=Yes"

ExcelFileName

Контейнер цикла по каждому элементу имеет следующие настройки:

Collection:

  1. Перечислитель настроен на Перечислитель файлов Foreach
  2. Папка - это папка с моими файлами
  3. В настоящее время для файлов установлено значение * .xlsx
  4. Имя полученного файла установлено как полностью квалифицированное

Variable Mappings

Переменная ExcelFileName, о которой я упоминал ранее, была установлена ​​в индекс 0

Я создал менеджер соединений Excel, указывающий на исходный файл со следующими соответствующими свойствами:

Excel connection manager

  1. DelayValidation: True
  2. Выражение: я попытался установить ExcelFilePath в Переменная ExcelFileName и использование следующего для ConnectionString:

    "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +  @[User::ExcelFileName]   + ";Extended Properties=\"" +  @[User::ExtProperties] + "\""
    

Сейчас он использует только ConnectionString.

  1. Сохранить то же соединение: False

Поток данных использует источник Excel с помощью диспетчера соединений Excel. Целью потока данных является получение количества записей из каждого файла Excel, получение имени файла и пользователя, выполняющего загрузку, и помещение информации в БД. Однако при выталкивании в БД имя файла и количество записей всегда являются первым используемым файлом, столько раз, сколько файлов соответствует критериям.

data flow

Я не получаю сообщений об ошибках или предупреждений. Я использовал следующий сценарий в своем потоке управления, чтобы увидеть, изменилось ли значение переменной, но всплывающее окно с сообщением показывает, что я все еще получаю начальное значение.

control flow

MessageBox.Show(Dts.Variables["User::ExcelFile"].Value.ToString());
Dts.TaskResult = (int)ScriptResults.Success;

Я несколько дней читал темы об этом, и это были настройки, которые предлагались для работы, но это все еще проблема для меня. Любая помощь будет оценена.

Ответы [ 2 ]

3 голосов
/ 27 марта 2019

С первого изображения похоже, что вы установили переменную ExcelFileName, которая будет оцениваться как выражение, поскольку выражение значка (fx) отображается на значке переменной:

enter image description here

Просто удалите выражение из переменной и убедитесь, что для свойства EvaluateAsExpression установлено значение False

0 голосов
/ 27 марта 2019

Вместо этого в редакторе цикла foreach выберите имя и расширение или укажите их полностью.и проверьте перемещение подпапок, если у вас есть подпапки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...