Не удалось прочитать строковое значение из столбца Excel - PullRequest
3 голосов
/ 10 июля 2019

Задача сценария SSIS, считывающая только числовые значения Excel, но не считывающая буквенно-цифровые значения, присутствующие в том же столбце

Я пытался использовать IMEX = 0, IMEX = 1 и IMEX = 2. Но буквенно-цифровые значения генерируются как NULL в моей таблице сервера SQL.

//Excel Connection String
string ConStr;
ConStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + 
fileFullPath + ";Extended Properties=\"Excel 12.0;HDR=" + HDR + 
";IMEX=0\"";

Если в первом 8-м столбце значения «A» являются целочисленными (0,1,2,3,4,5,6,7), а затем идут буквенно-цифровые (A, B, ABQX345) значения в нижних строках, тогда прочитать все значения как есть и вставить в таблицу SQL Server как

0,1,2,3,4,5,6,7,A,B,ABQX345

1 Ответ

1 голос
/ 10 июля 2019

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

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

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

Или, если у вас нет выбора для преобразования Excel в плоские файлы, вы можете заставить диспетчер соединений Excel игнорировать заголовки из первой строки, добавив HDR=NO к строке соединения и добавив IMEX=1, чтобы сообщить OLEDB-провайдер для указания типов данных из первой строки (который является заголовком - все строки большую часть времени) , в этом случае все столбцы импортируются как строки, и никакие значения не заменяются на NULL, но вы потеряете заголовки и дополнительная строка (строка заголовка импортируется).

Если вы не можете игнорировать строку заголовка, просто добавьте фиктивную строку, содержащую значения фиктивной строки (пример: aaa) после строки заголовка и добавьте IMEX=1 к строке подключения.

SchemaMapper Excel Класс импорта

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

Полезные ссылки

...