SSIS Обновить листы Excel - PullRequest
       6

SSIS Обновить листы Excel

0 голосов
/ 11 января 2012

Еще один вопрос SSIS: я уже очень близок к тому, чтобы обновить Excel, но у меня сложилось впечатление, что приложение Excel закрывается до того, как RefreshAll будет выполнен.Однажды я включил предупреждения и получил '!Это действие отменит ожидающую команду обновления данных.Продолжить? ' Когда я отменил их все, у меня был обновленный лист.Но, конечно, это не та цель, по которой нужно щелкать диалоговые окна в решении служб SSIS.

Конечно, я начал со ссылки на библиотеки Office.Interop.Excel.К вашему сведению, во-первых, я потратил часы на то, чтобы соединения ODBC работали на сервере.

Итог: пусть SSiS обновит мое превосходство.-> результат: когда я открываю файл, данные НЕ обновляются.

Я думаю, у меня должно быть что-то, что проверяет, завершилось ли обновление (успешно).Если TRUE, то Save and Close!

Я нашел предлагаемые решения в Интернете, но ни одно из них не работает, как показано ниже: кажется, у моего Excel нет QueryTables

$$$

Dim ws As Worksheet 
Dim qs As QueryTable 
For Each ws In Worksheets 
    For Each qs In ws.QueryTables 
        qs.Refresh (False) 
    Next qs 
Next ws 

$$$

Ниже у вас есть код из моего скриптового задания.Помощь очень ценится на этом!Спасибо!L

Public Sub Main()
    Dts.TaskResult = ScriptResults.Success

    Dim oApp As New Microsoft.Office.Interop.Excel.Application
    oApp.Visible = True
    oApp.UserControl = True
    Dim oldCI As System.Globalization.CultureInfo = _
        System.Threading.Thread.CurrentThread.CurrentCulture
    System.Threading.Thread.CurrentThread.CurrentCulture = _
        New System.Globalization.CultureInfo("en-US")
    'oApp.Workbooks.Add()
    'System.Threading.Thread.CurrentThread.CurrentCulture = oldCI

    Dim wb As Microsoft.Office.Interop.Excel.Workbook
    wb = oApp.Workbooks.Open(Dts.Variables("User::FileNameHandleFull1").Value.ToString)
    'oApp.DisplayAlerts = False
    'oApp.ActiveWorkbook.RefreshAll()
    wb.RefreshAll()
    'here I tried the .wait command but this gave a BUSY error
    wb.Save()
    wb.Close()
    oApp.DisplayAlerts = True

    oApp.Quit()
    Runtime.InteropServices.Marshal.ReleaseComObject(oApp)

End Sub
...