Как использовать задачу скрипта SSIS для удаления второй строки в месте назначения Excel?SQL Server 2012 - PullRequest
0 голосов
/ 31 мая 2018

У меня есть простой пакет, который извлекает данные из SQL Server и записывает их в электронную таблицу Excel.

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

Итак, я создал фиктивную строку в своем шаблоне Excel, которая может принимать более 255 символов.После загрузки данных мне нужно удалить эту фиктивную строку.

Я мало что знаю о C #.Как я могу удалить вторую строку в месте назначения Excel, используя задачу сценария SSIS C #?Нужно ли мне создавать переменные, которые содержат путь к папке и имя файла?

И как я могу сопоставить эти переменные с моим кодом C #?

enter image description here

enter image description here

Ответы [ 3 ]

0 голосов
/ 01 июня 2018

Вы можете использовать библиотеку Microsoft.Office.Interop.Excel.dll внутри Задачи сценария для достижения этой цели.

Вы можете использовать аналогичный код:

Примечание: я предположил, что имя переменной пути к файлуэто FilePath.Не забудьте выбрать переменную FilePath в переменных «Задача сценария» только для чтения (в редакторе сценариев).Также не забудьте добавить Microsoft.Office.Interop.Excel.dll в качестве ссылки внутри задачи скрипта

Imports Microsoft.Office.Interop

Public Sub Main()

    Dim strFile as String = Dts.Variables("FilePath").Value 
    Dim m_XlApp = New Excel.Application
    m_XlApp.visible = False
    m_XlApp.DisplayAlerts = False
    Dim m_xlWrkbs As Excel.Workbooks = m_XlApp.Workbooks
    Dim m_xlWrkb As Excel.Workbook

    m_xlWrkb = m_xlWrkbs.Open(strFile)
    m_xlWrkb.DoNotPromptForConvert = true 

    Dim m_XlWrkSheet As Excel.Worksheet = m_xlWrkb.Worksheets(1)

    m_XlWrkSheet.Cells(2, 1).EntireRow.Delete(Excel.XlDeleteShiftDirection.xlShiftUp)

    m_xlWrkb.Save()
    m_xlWrkb.Close(SaveChanges:=True)

    Marshal.ReleaseComObject(m_xlWrkb)
    Marshal.ReleaseComObject(m_xlWrkbs)
    m_XlApp.Quit()
    Marshal.ReleaseComObject(m_XlApp)

End Sub
0 голосов
/ 31 декабря 2018

У меня такая же проблема, черт возьми.

Как и вы, я создал фиктивную строку в своем шаблоне Excel, которая может принимать более 255 символов.Однако я работаю в Visual Studio 2008 и не могу ничего установить на свой компьютер.

Мое решение удалить фиктивную строку - установить в ее первом столбце значение «DummyRow» и создать следующий макрос вшаблон Excel:

Private Sub Workbook_Open()
    Call SupprDummyRow
End Sub

Sub SupprDummyRow()

    x = Range("A2").Value 'First row after the titles, first column 
    y = Range("A3").Value 'Second row after the titles, first column

    If (x = "DummyRow" And y <> "") Then 'The Dummy Row is present AND the next row have value (we are in the export file)
            Range("A2").EntireRow.Delete 'Delete the lign
    End If
End Sub

Обратите внимание, что в моей ситуации первый столбец всегда имеет значение (без пустой строки).

Надеюсь, что это поможет!

С уважением,

0 голосов
/ 31 мая 2018

Попробуйте увеличить длину столбца в месте назначения Excel.Таким образом, вам даже не нужно будет добавлять фиктивную запись в файл Excel, а затем удалять ее.

  1. Щелкните правой кнопкой мыши пункт назначения Excel.
  2. Нажмите «Показать расширенный редактор».
  3. В расширенном редакторе перейдите на вкладку «Свойства ввода и вывода».
  4. Разверните «Внешний столбец» вашего раздела назначения Excel и отрегулируйте значения свойств длины требуемого столбца.,Вы также можете изменить типы данных, если это необходимо.Пожалуйста, найдите скриншот для того же.

enter image description here

Попробуйте и дайте мне знать, если это сработало.

...