#ssis
#SSIS
Вопрос:
Я работаю над проектом SSIS, который сканирует каталог и перебирает все файлы Excel, которые затем будут загружены в MSSQL. В настоящее время у меня возникла проблема с 2966171
представлением как 2.966171e 006
. Вот что у меня есть:
1) Строка подключения к Excel передает IMEX =1; (режим импорта-экспорта) Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\UNCPATHTOExcel.xls;Extended Properties="EXCEL 8.0;HDR=NO;IMEX=1";
2) Было подтверждено, что типом данных для этого поля является DT_WSTR длиной 255.
То, что я пробовал:
1) Изменение типа данных в Excel на текст
2) Создание компонента скрипта, который явно преобразует строку в десятичную дробь обратно в строку. (Ужасный подход)
3) Приведение к компоненту производного столбца.
РЕДАКТИРОВАТЬ: я должен сохранить этот столбец с типом DT_WSTR, некоторые другие строки содержат буквенно-цифровые значения.
Комментарии:
1. вы пробовали изменить столбец на числовой в редакторе components advance?
2. Извините, я должен был упомянуть, что это должна быть строка, потому что некоторые строки в столбце являются буквенно-цифровыми.
Ответ №1:
используйте элементы управления для каждого цикла, чтобы перебирать файлы Excel и отображать путь к файлу в переменную (например: @[User::strExcelFile])
в контейнере foreach вы должны использовать 2 задачи потока данных; первая содержит исходный код Excel и компонент сценария в качестве назначения, вторая задача потока данных — ваша задача
если файлы Excel имеют одинаковую структуру, необходимо выполнить следующие действия:
- откройте файл Excel и измените тип всего столбца на number
- в диспетчере соединений Excel выберите этот файл
- во второй задаче потока данных в исходном коде Excel установите для свойства проверки задержки значение true
- в первой задаче потока данных в свойствах компонента сценария (вкладка сценарий) поместите переменную «strExcelFile» в переменные, доступные только для чтения, и в сценарии вы должны выполнить следующие шаги:
Сначала добавьте Microsoft.Офис.Взаимодействие.Excel.dll в качестве ссылки
Во-вторых, прочитайте путь к файлу ExcelFile из переменной, используя следующий код:
Imports Microsoft.Office.Interop.Excel
Dim strExcelFiles As String = String.Empty
Public Overrides Sub PreExecute()
MyBase.PreExecute()
strExcelFiles = Variables.strExcelFile
End Sub
В-третьих, в главном подразделе напишите create an Excel.application установите для свойства Visible значение false
Откройте ExcelFile и измените весь ColumnType на Number, сохраните файл Excel и закройте приложение, используя следующий код:
Dim ColIdx As Integer = 0 'Number Column index
Dim appExcel As New Excel.Application
appExcel.Visible = False
Dim wrkbExcel As New Excel.Workbook
wrkbExcel = appExcel.Workbooks.Open(strExcelFile)
Dim wrkshExcel As Excel.Worksheet = wrkbExcel.Worksheets(0)
wrkshExcel.Cells(1, ColIdx).EntireColumn.NumberFormat = "0"
'this will change the EntireColumn Type to Number and eliminate scientific character E
wrkbExcel.Close(True)
appExcel.Quit()
Кратко, каждый файл Excel должен быть отредактирован перед импортом из него данных, потому что научный знак появляется, когда число сохраняется в ячейке, имеющей тип данных, отличный от number