Контейнер цикла по каждому элементу в моем процессе не помещает новое имя файла в установленную переменную. Он проходит через процесс столько раз, сколько файлов соответствует критериям, мне просто нужно, чтобы имя файла было динамическим.
Я создал имя переменной, которая содержит полный путь к файлу первого файла в моем нужном каталоге. Выглядит примерно как C:\Somepath\ExcelFile.xlsx
Я также создал имя переменной ExtProperties для использования в ConnectionString со значением "Excel 12.0;HDR=Yes"
Контейнер цикла по каждому элементу имеет следующие настройки:
:
- Перечислитель настроен на Перечислитель файлов Foreach
- Папка - это папка с моими файлами
- В настоящее время для файлов установлено значение * .xlsx
- Имя полученного файла установлено как полностью квалифицированное
Переменная ExcelFileName, о которой я упоминал ранее, была установлена в индекс 0
Я создал менеджер соединений Excel, указывающий на исходный файл со следующими соответствующими свойствами:
- DelayValidation: True
Выражение: я попытался установить ExcelFilePath
в
Переменная ExcelFileName и использование следующего для
ConnectionString:
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + @[User::ExcelFileName] + ";Extended Properties=\"" + @[User::ExtProperties] + "\""
Сейчас он использует только ConnectionString.
- Сохранить то же соединение: False
Поток данных использует источник Excel с помощью диспетчера соединений Excel. Целью потока данных является получение количества записей из каждого файла Excel, получение имени файла и пользователя, выполняющего загрузку, и помещение информации в БД. Однако при выталкивании в БД имя файла и количество записей всегда являются первым используемым файлом, столько раз, сколько файлов соответствует критериям.
Я не получаю сообщений об ошибках или предупреждений. Я использовал следующий сценарий в своем потоке управления, чтобы увидеть, изменилось ли значение переменной, но всплывающее окно с сообщением показывает, что я все еще получаю начальное значение.
MessageBox.Show(Dts.Variables["User::ExcelFile"].Value.ToString());
Dts.TaskResult = (int)ScriptResults.Success;
Я несколько дней читал темы об этом, и это были настройки, которые предлагались для работы, но это все еще проблема для меня. Любая помощь будет оценена.