Пропуск строк при импорте Excel в SQL с помощью SSIS 2008

Я должен импортировать листы, которые похожи на следующее:

    March Orders   
   ***Empty Row    
    Week Order # Date Cust #
    3.1 271356 3/3/10 010572
    3.1 280353 3/5/10 022114
    3.1 290822 3/5/10 010275
    3.1 291436 3/2/10 010155
    3.1 291627 3/5/10 011840

Заголовки столбцов являются на самом деле строкой 3. Я могу использовать Excel Sourch для импорта их, но я не знаю, как указать, что информация запускается в строке 3.

Я Погуглил проблему, но подошел пустой.

6
задан DavidStein 10 March 2010 в 14:48
поделиться

2 ответа

посмотрите:

ссылки содержат более подробную информацию, но я добавил текст со страниц (на случай, если ссылки не работают)

http://social.msdn.microsoft.com/Forums/en-US/sqlintegrationservices/thread/97144bb2-9bb9-4cb8-b069-45c29690dfeb

Q:

Пока мы загружаем текстовый файл в SQL Сервер через SSIS, у нас есть возможность пропускать любое количество ведущих строк из источника и загружать данные на SQL-сервер.Есть ли положение, чтобы сделать то же самое для файла Excel .

Исходный файл Excel для меня имеет некоторое описание в первых 5 строках, я хочу пропустить его и начать загрузку данных с строки 6. Пожалуйста, выскажите свое мнение по этому поводу.

A:

Проще всего было бы присвоить каждой строке номер (что-то вроде идентификатора в SQL Server), а затем использовать условное разбиение, чтобы отфильтровать все , где число <= 5

http://social.msdn.microsoft.com/Forums/en/sqlintegrationservices/thread/947fa27e-e31f-4108-a889-18acebce9217

Q:

  1. Возможно ли при импорте данных из Таблица Excel в БД, например, пропускает первые 6 строк?

  2. Также данные Excel разделены на разделы с заголовками. Например, можно ли пропустить каждую 12-ю строку?

A:

  1. ДА, ВЫ МОЖЕТЕ. На самом деле, вы можете сделать это очень легко, если знаете, какие столбцы с номерами будут импортированы из вашего файла Excel. В задаче «Поток данных» вам нужно будет установить настраиваемое свойство "OpenRowset" для подключения к Excel (щелкните правой кнопкой мыши подключение к Excel> Свойства ; в окне "Свойства" найдите OpenRowset в разделе "Пользовательские свойства"). Чтобы игнорировать первые 5 строк в Sheet1 и импортировать столбцы AM, вы должны ввести следующее значение для OpenRowset: Sheet1 $ A6: M (обратите внимание, я не указал номер строки для столбца M. Вы можете ввести номер строки , если хотите, но в моем случае количество строк может изменяться от одной итерации к следующей)

  2. ОПЯТЬ, ДА, ВЫ МОЖЕТЕ. Вы можете импортировать данные с помощью условного разделения.Вы бы сконфигурировали условное разбиение для поиска в каждой строке, что однозначно идентифицирует это как строку заголовка; пропустить строки , соответствующие этой «логике заголовка». Другой вариант - импортировать все строки, а затем удалить строки заголовков с помощью сценария SQL в базе данных ... как курсор, удаляющий каждую 12-ю строку. Или вы можете добавить поле идентификации с начальным значением / приращением 1/1, а затем удалить все строки с номерами, которые идеально делятся на 12. Что-то вроде , что ...

http://social.msdn.microsoft.com/Forums/en-US/sqlintegrationservices/thread/847c4b9e-b2d7-4cdf-a193-e4ce14986ee2

Вопрос:

У меня есть пакет SSIS, который импортирует из файл Excel с данными , начинающимися в 7-й строке.

В отличие от той же операции с файлом CSV ('Заголовочные строки, которые нужно пропустить' в редакторе диспетчера подключений), я не могу найти способ игнорировать первые 6 строк подключение файла Excel.

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

A:

Вопрос Войдите, чтобы проголосовать 1 Войдите, чтобы проголосовать rbhro, на самом деле было 2 поля в верхних 5 строках с некоторыми данными, которые, как мне кажется, помешали импортеру от полного игнорирования этих строк.

Так или иначе, я нашел решение своей проблемы.

В моем исходном объекте Excel я использовал «SQL-команду» в качестве «Режима доступа к данным » (он раскрывается при двойном щелчке по исходному объекту Excel). Оттуда я смог создать запрос (кнопка "Создать запрос"), который собирал только нужные мне записи.Примерно так: SELECT F4, F5, F6 FROM [Spreadsheet $] WHERE (F4 IS NOT NULL) AND (F4 <> 'TheHeaderFieldName')

Примечание. Сначала я попробовал ISNUMERIC вместо IS NOT NULL, но по какой-то причине не поддерживался.

В моем конкретном случае меня интересовали только строки, в которых F4 не было NULL (и, к счастью, F4 не содержал мусора в первых 5 строках). Я мог пропустить всю строку заголовка (строка 6)со вторым предложением WHERE .

Таким образом, мой источник данных был полностью очищен. Все, что мне нужно было сделать сейчас , это добавить объект преобразования данных между источником и местом назначения (все, что нужно было преобразовать из юникода в электронную таблицу), , и это сработало.

10
ответ дан 9 December 2019 в 20:42
поделиться

Мое первое предложение - не принимать файлы в этом формате. Импортируемые файлы Excel всегда должны начинаться со строк заголовков столбцов. Отправьте его тому, кто вам его предоставит, и попросите исправить свой формат. Это работает в большинстве случаев.

Мы предоставляем нашим клиентам и поставщикам инструкции о том, как файлы должны быть отформатированы, прежде чем мы сможем их обработать, и они должны максимально соответствовать этим рекомендациям. Люди часто не знают, что такие файлы создают проблемы при обработке (в следующем месяце у них может быть шесть строк до начала данных), и их нужно объяснить, что файлы Excel должны начинаться с заголовков столбцов, не иметь пустых строк в в середине данных и не повторять заголовки несколько раз, и, что наиболее важно, они должны иметь одни и те же столбцы с одинаковыми названиями столбцов в одном и том же порядке каждый раз. Если они не могут этого предоставить, то, вероятно, у вас нет чего-то, что работало бы для автоматического импорта, поскольку вы будете каждый раз получать файл в другом формате, в зависимости от настроения человека, который ведет электронную таблицу Excel.Между прочим, мы очень стараемся никогда не получать данные из Excel (работает только в некоторых случаях, но если у них есть данные в базе данных, они обычно могут их разместить). Они также должны знать, что любые изменения, которые они вносят в формат электронной таблицы, приведут к изменению пакета импорта и что с них будет взиматься плата за эти изменения разработки (при условии, что это внешние клиенты, а не внутренние). Об этих изменениях необходимо сообщить заранее и запланировать время для разработчиков, файл с неправильным форматом не сработает и будет возвращен им для исправления, если нет.

Если это не сработает, могу я предложить вам открыть файл, удалить первые две строки и сохранить текстовый файл в потоке данных. Затем напишите поток данных, который будет обрабатывать текстовый файл. SSIS проделал паршивую работу по поддержке Excel, и все, что вы можете сделать, чтобы получить файл в другом формате, в конечном итоге упростит жизнь.

1
ответ дан 9 December 2019 в 20:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: