powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / SSIS ScriptTask Interop.Excel не закрывается процесс excel
3 сообщений из 3, страница 1 из 1
SSIS ScriptTask Interop.Excel не закрывается процесс excel
    #39754917
MaxFoxxy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всех с наступающим!

Генерирую ексели и наполняю данными из SQL.
Проблема такова, не закрывается приложение excel. Не закрывается ровно тогда, когда пытаюсь на 2й лист вывести данные с помощью CopyFromRecordset. Уже 3й день борюсь с этим, все впустую...

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
 Public Sub Main()


        Dim conn As ADODB.Connection
        Dim rs As ADODB.Recordset
        Dim fld As ADODB.Field
        Dim sConnString As String

        sConnString = "Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=DWH;Integrated Security=SSPI;"

        conn = New ADODB.Connection
        rs = New ADODB.Recordset


        conn.ConnectionString = sConnString
        conn.Open()
        



        Dim FileName As String

        FileName = "C:\FTP\asna\output\" + Dts.Variables("var1").Value.ToString + "_1.xlsx"

        Dim oExcel As New Microsoft.Office.Interop.Excel.Application()
        Dim oBook As Microsoft.Office.Interop.Excel.Workbook
        Dim oSheet As Microsoft.Office.Interop.Excel.Worksheet



        oExcel.ScreenUpdating = False
        oExcel.DisplayAlerts = False
        oExcel.Interactive = False
        oExcel.Visible = False
        oExcel.SheetsInNewWorkbook = 2


        oBook = oExcel.Workbooks.Add()
        Dim col As Integer

		rs = conn.Execute("select * from tab1")

        '----------------Продажи--------------------'
        oSheet = CType(oBook.Worksheets(1), Worksheet)
        oSheet.Name = "Продажи"

        If Not rs.EOF Then
            'Формирование наименований колонок
            col = 1
            For Each fld In rs.Fields
                oSheet.Cells(1, col).value = fld.Name.ToString
                col = col + 1
            Next
            'Вывод данных
            oSheet.Cells(2, 1).CopyFromRecordset(rs)

            rs.Close()
        Else
            MsgBox("Error: No records returned.")
        End If



        rs = conn.Execute("select * from tab2")

        ''----------------Закупки--------------------'
        oSheet = CType(oBook.Worksheets(2), Worksheet)
        oSheet.Name = "Закупки"


        If Not rs.EOF Then
            'Формирование наименований колонок
            col = 1
            For Each fld In rs.Fields
                oSheet.Cells(1, col).value = fld.Name.ToString
                col = col + 1
            Next
            'Вывод данных
            oSheet.Cells(2, 1).CopyFromRecordset(rs) 'Без этой строки процесс закрывается

            rs.Close()


        Else
            MsgBox("Error: No records returned.")
        End If

        conn.Close()


        ReleaseObject(fld)
        ReleaseObject(rs)
        ReleaseObject(conn)


        rs = Nothing
        fld = Nothing
        conn = Nothing


        oBook.SaveAs(FileName)
        oBook.Close()
        oExcel.Quit()

        oSheet = Nothing
        oBook = Nothing




        ReleaseObject(oSheet)        
        ReleaseObject(oBook)        
        ReleaseObject(oExcel)

        oSheet = Nothing
        oBook = Nothing
        oExcel = Nothing
        conn = Nothing

        Dts.TaskResult = ScriptResults.Success
    End Sub

	Private Sub ReleaseObject(ByVal obj As Object)
        Try
            Dim intRel As Integer = 0
            Do
                intRel = System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
                'MsgBox(intRel)
            Loop While intRel > 0
        Catch ex As Exception
            obj = Nothing
            'MsgBox(ex.Message)
        Finally
            GC.Collect()
            GC.WaitForPendingFinalizers()
        End Try
    End Sub

Модератор: Учимся использовать тэги оформления кода - FAQ
...
Рейтинг: 0 / 0
SSIS ScriptTask Interop.Excel не закрывается процесс excel
    #39754925
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaxFoxxy,

Server-side Automation - это зло.
https://support.microsoft.com/en-us/help/257757/considerations-for-server-side-automation-of-office

В SSIS можно указать Destination на Excel ?

Если всё-таки нужно покодить, то берите любой OpenXML SDK , например, EPPlus , и кодьте на здоровье.
...
Рейтинг: 0 / 0
SSIS ScriptTask Interop.Excel не закрывается процесс excel
    #39754933
MaxFoxxy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
big-duke,
Понял, спс! Не придумал как сделать excel как destination, т.к. состав полей рекордсета всегда динамический...

Модератор: Тема перенесена из форума "Visual Basic".
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / SSIS ScriptTask Interop.Excel не закрывается процесс excel
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]