Желательна научная нотация SSIS

#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) Исходный код Excel Было подтверждено, что типом данных для этого поля является DT_WSTR длиной 255.

То, что я пробовал:

1) Изменение типа данных в Excel на текст

2) Создание компонента скрипта, который явно преобразует строку в десятичную дробь обратно в строку. (Ужасный подход)

3) Приведение к компоненту производного столбца.

Исходный код и SSIS

РЕДАКТИРОВАТЬ: я должен сохранить этот столбец с типом DT_WSTR, некоторые другие строки содержат буквенно-цифровые значения.

Комментарии:

1. вы пробовали изменить столбец на числовой в редакторе components advance?

2. Извините, я должен был упомянуть, что это должна быть строка, потому что некоторые строки в столбце являются буквенно-цифровыми.

Ответ №1:

используйте элементы управления для каждого цикла, чтобы перебирать файлы Excel и отображать путь к файлу в переменную (например: @[User::strExcelFile])

в контейнере foreach вы должны использовать 2 задачи потока данных; первая содержит исходный код Excel и компонент сценария в качестве назначения, вторая задача потока данных — ваша задача

если файлы Excel имеют одинаковую структуру, необходимо выполнить следующие действия:

  1. откройте файл Excel и измените тип всего столбца на number
  2. в диспетчере соединений Excel выберите этот файл
  3. во второй задаче потока данных в исходном коде Excel установите для свойства проверки задержки значение true
  4. в первой задаче потока данных в свойствах компонента сценария (вкладка сценарий) поместите переменную «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