Импорт данных из нескольких листов excel с помощью служб SSIS
У меня есть ниже код c sharp в компоненте скрипта(преобразование) в пакете ssis, который будет загружать данные с одного листа из каждой книги. Теперь требования изменились и у меня есть более 15 книг excel, которые имеют несколько листов, и мне нужно автоматизировать перенос этих данных в таблицу SQL server.
Есть ли способ извлекать данные из Excel только с определенных листов? Похоже, что он полагается на имя листа в качестве источника данных, например ExcelworkbookA имеет 7 шетов, но нуждается в данных только с трех листов.
Кто-нибудь посоветует мне, как изменить приведенный ниже код, чтобы разрешить несколько листов из exceworkbooks
#справка по региону: введение в компонент скрипта
/* Компонент сценария позволяет выполнять практически любую операцию, которая может быть выполнена в
* приложение .Net в контексте потока данных служб Integration Services.
*
* Раскройте другие регионы, которые имеют префиксы "Help", чтобы найти примеры конкретных способов использования
* Функции служб Integration Services в этом компоненте скрипта. */
#endregion
#пространства имен регионов
использование системы;
использование System.Data;
использование Microsoft.SqlServer.Dts.Pipeline.Обертка;
с помощью Microsoft.От SQLServer.ДЦ.Во время выполнения.Обертка;
использование System.Data.Для oledb;
использование системы.Окна.Формы;
использование Excel = Microsoft.Офис.Взаимодействие.Превосходить;
#endregion
/// <резюме>
/// Это класс, в который нужно добавить свой код. Не изменяйте имя, атрибуты или родителя
/// из этого класса.
///
[Майкрософт.От SQLServer.ДЦ.Производство.Ssisscriptcomponentrypointattribute]
открытый класс ScriptMain : UserComponent
{
#справка по региону: использование переменных и параметров служб Integration Services
/* Чтобы использовать переменную в этом скрипте, сначала убедитесь, что она была добавлена в
* либо список, содержащийся в свойство readonlyvariables или перечень, содержащийся в
* свойство ReadWriteVariables этого компонента скрипта, в зависимости от того, является ли ваш
* код должен быть записан в переменную. Для этого сохраните этот скрипт, закройте этот экземпляр
* Visual Studio и обновите свойства ReadOnlyVariables и ReadWriteVariables в
* Окно редактора преобразования скриптов.
* Чтобы использовать параметр в этом скрипте, выполните те же действия. Параметры всегда доступны только для чтения.
*
* Пример считывания из переменной или параметра:
* DateTime startTime = переменные.MyStartTime;
*
* Пример записи в переменную:
* Variables.myStringVariable = "новое значение";
*/
#endregion
#справка по региону: использование менеджеров соединений служб Integration Services
/* В этом компоненте скрипта можно использовать некоторые типы менеджеров соединений. См. раздел справки
* Подробнее см. раздел "программная работа с менеджерами соединений".
*
* Чтобы использовать диспетчер соединений в этом сценарии, сначала убедитесь, что диспетчер соединений имеет
* был добавлен либо в список менеджеров подключений на странице менеджеры подключений сайта
* редактор компонентов скрипта. Чтобы добавить диспетчер соединений, сохраните этот сценарий, закройте этот экземпляр
* Visual Studio и добавьте диспетчер подключений в список.
*
* Если компоненту необходимо удерживать соединение открытым во время обработки строк, переопределите
* Методы AcquireConnections и ReleaseConnections.
*
* Пример использования менеджера ADO.Net связи, чтобы приобрести объект sqlconnection:
* объект rawConnection = соединения.SalesDB.AcquireConnection(транзакция);
* SqlConnection salesDBConn = (SqlConnection)rawConnection;
*
* Пример использования Диспетчера соединений с файлами для получения пути к файлу:
* объект rawConnection = соединения.Prices_zip.AcquireConnection(транзакция);
* string filePath = (string)rawConnection;
*
* Пример освобождения диспетчера соединений:
* Блат.SalesDB.ReleaseConnection(rawConnection);
*/
#endregion
#справка по региону: запуск событий служб интеграции
/* Этот компонент скрипта может запускать события.
*
* Пример запуска события ошибки:
* ComponentMetaData.FireError(10, "значения процесса", "плохое значение", "", 0, out cancel);
*
* Пример запуска информационного события:
* ComponentMetaData.FireInformation(10, "значения процесса", "обработка началась", "", 0, fireAgain);
*
* Пример запуска предупреждающего события:
* ComponentMetaData.Предупреждение о пожаре(10, "значения процесса", "строки не получены", "", 0);
*/
#endregion
/// <резюме>
/// Этот метод вызывается один раз, прежде чем строки начнут обрабатываться в потоке данных.
///
/// Вы можете удалить этот метод, если вам ничего не нужно здесь делать.
///
общественного переопределить недействительными методами preexecute()
{
базы.Методами preexecute();
/*
* Добавьте свой код здесь
*/
}
/// <резюме>
/// Этот метод вызывается после того, как все строки прошли через этот компонент.
///
/// Вы можете удалить этот метод, если вам ничего не нужно здесь делать.
///
public override void PostExecute()
{
база.PostExecute();
/*
* Добавьте свой код здесь
*/
}
общественного переопределить недействительными метод createnewoutputrows()
{
/*
Добавьте строки, вызвав метод AddRow для переменной-члена с именем "Buffer".
Например, вызовите MyOutputBuffer.AddRow (), если ваш вывод был назван "MyOutput".
*/
пробовать
{
строковое имя файла = переменные.SharepointFilepath.Метод toString();
//string sheetName; //= переменные.ExcelSheetName.Метод toString();
Превосходить.Приложение xlApp = новый Excel.Приложение();
xlApp.Видна = ложь;
xlApp.DisplayAlerts = ложь;
Превосходить.Рабочая тетрадь xlWorkBook = xlApp.Workbooks.Открыть(имя файла, пароль: "'");
Превосходить.Рабочий лист xlWorkSheet = xlWorkBook.Рабочие листы[1] как Microsoft.Офис.Взаимодействие.Превосходить.Рабочий лист;
Превосходить.Диапазон UsedRange = xlWorkSheet.UsedRange;
foreach (Excel.Диапазон c в UsedRange)
{
строка val = Convert.Метод toString(ок. Значение2);
если (val != усилитель"" &;&ампер; вал != нуль)
{
Output0Buffer.Метода addrow();
Output0Buffer.Строка = c.строка;
Output0Buffer.Колонка = c.колонка;
Output0Buffer.Значение = Вэл;
}
}
xlApp.Бросить();
xlApp = null;
СБОРЩИК МУСОРА.Собирать();
GC.WaitForPendingFinalizers();
}
catch (исключение e)
{
Output1Buffer.Метода addrow();
Output1Buffer.Исключение = e.ToString();
}
}
}
Что я уже пробовал:
Пробовал с переменной но безуспешно
#realJSOP
Являются ли имена файлов и имена листов всегда одинаковыми?
Member 13769780
да имена файлов и имена листов всегда одинаковы