Контейнер предварительного цикла SSIS, не перебирающий файлы Excel

#sql-server #excel #ssis #etl #foreach-loop-container

#sql-server #excel #ssis #etl #контейнер foreach-loop-

Вопрос:

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

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

ExcelFileName

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

Коллекция:

  1. Для перечислителя установлено значение Foreach File Enumerator
  2. Папка — это каталог, в котором хранятся мои файлы
  3. В настоящее время для файлов установлено значение *.xlsx
  4. Для имени извлекаемого файла установлено значение Full Qualified

Сопоставления переменных

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

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

Диспетчер соединений Excel

  1. Проверка задержки: True
  2. Выражение: Я пробовал как устанавливать ExcelFilePath в переменную ExcelFileName, так и использовать следующее для строки подключения:

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

Прямо сейчас он использует только строку подключения.

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

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

поток данных

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

поток управления

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

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

Ответ №1:

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

введите описание изображения здесь

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

Комментарии:

1. Большое вам спасибо. Это было правильно. Я нигде не видел указания на это, поэтому я надеюсь, что этот вопрос поможет другим в будущем.

Ответ №2:

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