
Cerrar proceso de excel que se envia por email
Publicado por Raul Alejandro (8 intervenciones) el 04/04/2016 22:36:19
Buen Dia,
El problema que tengo es que necesito recorrer una tabla de proveedores de SQL que contiene sus correos y dependiendo de su id de proveedores generarle dos reportes, guardarlos en una carpeta de red y después anexarlos como archivos adjuntos para enviarles un email automatico a cada uno, ya funciona la aplicación el detalle que tengo es que los procesos de Excel se me quedan abiertos y porque son muchos proveedores se quedan como 100 procesos de Excel abiertos, el código de la aplicación es el siguiente:
El problema que tengo es que necesito recorrer una tabla de proveedores de SQL que contiene sus correos y dependiendo de su id de proveedores generarle dos reportes, guardarlos en una carpeta de red y después anexarlos como archivos adjuntos para enviarles un email automatico a cada uno, ya funciona la aplicación el detalle que tengo es que los procesos de Excel se me quedan abiertos y porque son muchos proveedores se quedan como 100 procesos de Excel abiertos, el código de la aplicación es el siguiente:
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
*De aquí obtengo los id y correos de los proveedores*
Dim DA3 As New SqlDataAdapter("SP", Conexion)
DA3.SelectCommand.CommandType = CommandType.StoredProcedure
Dim DT3 As New DataTable
DA3.Fill(DT3)
*************************************************************
If DT3.Rows.Count <> 0 Then
'**Mata o elimina los archivos de la carpeta especificada**'
Kill("direccion
Dim FIla As DataRow
*Recorro todos los registros*
For Each FIla In DT3.Rows
'**El siguiente If valida si el no_proveedor es nulo o no**'
If IsDBNull(FIla.Item("no_proveedor")) = True Then
Else
Dim x As Decimal
Dim s As String
x = FIla.Item("no_proveedor")
If IsDBNull(FIla.Item("Email")) = False Then
s = FIla.Item("email")
End If
If IsDBNull(x) = True Then
Else
'**Consulta para OPReports No Confirmados**'
Dim DA As New SqlDataAdapter("SP", Conexion)
DA.SelectCommand.CommandType = CommandType.StoredProcedure
DA.SelectCommand.Parameters.AddWithValue("@x", x)
Dim DT As New DataTable
DT.Clear()
DA.Fill(DT)
DA.Dispose()
*Generar excel1*
Dim rowsTotal, colsTotal As Short
Dim I, j As Short
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor
Dim xlApp As New Excel.Application
Dim excelBook As Excel.Workbook = xlApp.Workbooks.Add
Dim excelWorksheet As Excel.Worksheet = CType(excelBook.Sheets(1), Excel.Worksheet)
xlApp.Visible = False
'**Procedimiento para validar que hay informacion en el OPReports No Confirmados**'
If DT.Rows.Count = 0 Then
Else
rowsTotal = DT.Rows.Count
colsTotal = DT.Columns.Count
With excelWorksheet
.Name = "NON CONFIRMED ORDERS"
.Cells.Select()
.Cells.Delete()
For I = 0 To rowsTotal - 1
For j = 0 To colsTotal - 1
.Cells(I + 3, j + 1).value = DT.Rows(I).Item(j)
Next j
Next I
'Aqui van los datos del encabezado
.Range("A1").FormulaR1C1 = "SUPPLIER"
.Range("A2").FormulaR1C1 = "PROVEEDOR"
.Range("B1").FormulaR1C1 = "PO"
.Range("B2").FormulaR1C1 = "OC"
.Range("C1").FormulaR1C1 = "CODE"
.Range("C2").FormulaR1C1 = "CODIGO"
.Range("D1").FormulaR1C1 = "DESCRIPTION"
.Range("D2").FormulaR1C1 = "DESCRIPCION"
.Range("E1").FormulaR1C1 = "SUP CODE"
.Range("E2").FormulaR1C1 = "CODIGO PROVEEDOR"
.Range("F1").FormulaR1C1 = "PO DATE"
.Range("F2").FormulaR1C1 = "FECHA OC"
.Range("G1").FormulaR1C1 = "REQ DATE"
.Range("G2").FormulaR1C1 = "FECHA REQUERIDA"
.Range("H1").FormulaR1C1 = "CONF DATE"
.Range("H2").FormulaR1C1 = "FECHA CONFIRMADA"
.Range("I1").FormulaR1C1 = "PROMISE DATE"
.Range("I2").FormulaR1C1 = "FECHA PROMESA"
.Range("J1").FormulaR1C1 = "AGING"
.Range("J2").FormulaR1C1 = "DIAS TARDE"
.Range("K1").FormulaR1C1 = "UOM"
.Range("K2").FormulaR1C1 = "UNIDAD"
.Range("L1").FormulaR1C1 = "REQ PCS"
.Range("L2").FormulaR1C1 = "PCS REQ"
.Range("M1").FormulaR1C1 = "DEL PCS"
.Range("M2").FormulaR1C1 = "PCS SURTIDAS"
.Range("N1").FormulaR1C1 = "BALANCE"
.Range("N2").FormulaR1C1 = "SALDO"
'Formato General
.Range("1:1").Interior.Color = RGB(204, 192, 218)
.Range("2:2").Interior.Color = RGB(204, 192, 218)
.Range("F:I").NumberFormat = "[$-409]d-mmm-yy;@"
.Columns("O:P").ClearContents()
.Rows("1:1").Font.FontStyle = "Bold"
.Rows("2:2").Font.FontStyle = "Bold"
.Rows("2:2").Autofilter()
.Cells.Columns.AutoFit()
.Cells.Select()
.Cells.EntireColumn.AutoFit()
.Cells(1, 1).Select()
End With
excelBook.Application.ActiveWorkbook.SaveAs("direccion" & x & ".xlsx")
excelBook.Application.ActiveWorkbook.Application.Quit()
excelBook.Close()
xlApp.Quit()
xlApp = Nothing
excelBook = Nothing
excelWorksheet = Nothing
GC.Collect()
End If
'**Consulta para OPReports Confirmados**'
Dim DA2 As New SqlDataAdapter("SP", Conexion)
DA2.SelectCommand.CommandType = CommandType.StoredProcedure
DA2.SelectCommand.Parameters.AddWithValue("@x", x)
Dim DT2 As New DataTable
DT2.Clear()
DA2.Fill(DT2)
DA2.Dispose()
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor
Dim xlApp2 As New Excel.Application
Dim excelBook2 As Excel.Workbook = xlApp2.Workbooks.Add
Dim excelWorksheet2 As Excel.Worksheet = CType(excelBook2.Sheets(1), Excel.Worksheet)
xlApp2.Visible = False
'**Procedimiento para validar que hay informacion en el OPReports Confirmados**'
If DT2.Rows.Count = 0 Then
Else
Dim rowsTotal2, colsTotal2 As Short
Dim I2, j2 As Short
With (excelWorksheet2)
.Name = "OPEN PO REPORT"
rowsTotal2 = DT2.Rows.Count
colsTotal2 = DT2.Columns.Count
For I2 = 0 To rowsTotal2 - 1
For j2 = 0 To colsTotal2 - 1
.Cells(I2 + 3, j2 + 1).value = DT2.Rows(I2).Item(j2)
Next j2
Next I2
'Aqui van los datos del encabezado
.Range("A1").FormulaR1C1 = "SUPPLIER"
.Range("A2").FormulaR1C1 = "PROVEEDOR"
.Range("B1").FormulaR1C1 = "PO"
.Range("B2").FormulaR1C1 = "OC"
.Range("C1").FormulaR1C1 = "CODE"
.Range("C2").FormulaR1C1 = "CODIGO"
.Range("D1").FormulaR1C1 = "DESCRIPTION"
.Range("D2").FormulaR1C1 = "DESCRIPCION"
.Range("E1").FormulaR1C1 = "SUP CODE"
.Range("E2").FormulaR1C1 = "CODIGO PROVEEDOR"
.Range("F1").FormulaR1C1 = "PO DATE"
.Range("F2").FormulaR1C1 = "FECHA OC"
.Range("G1").FormulaR1C1 = "REQ DATE"
.Range("G2").FormulaR1C1 = "FECHA REQUERIDA"
.Range("H1").FormulaR1C1 = "CONF DATE"
.Range("H2").FormulaR1C1 = "FECHA CONFIRMADA"
.Range("I1").FormulaR1C1 = "PROMISE DATE"
.Range("I2").FormulaR1C1 = "FECHA PROMESA"
.Range("J1").FormulaR1C1 = "AGING"
.Range("J2").FormulaR1C1 = "DIAS TARDE"
.Range("K1").FormulaR1C1 = "UOM"
.Range("K2").FormulaR1C1 = "UNIDAD"
.Range("L1").FormulaR1C1 = "REQ PCS"
.Range("L2").FormulaR1C1 = "PCS REQ"
.Range("M1").FormulaR1C1 = "DEL PCS"
.Range("M2").FormulaR1C1 = "PCS SURTIDAS"
.Range("N1").FormulaR1C1 = "BALANCE"
.Range("N2").FormulaR1C1 = "SALDO"
'Formato General
.Range("1:1").Interior.Color = RGB(204, 192, 218)
.Range("2:2").Interior.Color = RGB(204, 192, 218)
.Range("F:I").NumberFormat = "[$-409]d-mmm-yy;@"
.Columns("O:P").ClearContents()
.Rows("1:1").Font.FontStyle = "Bold"
.Rows("2:2").Font.FontStyle = "Bold"
.Rows("2:2").Autofilter()
.Cells.Columns.AutoFit()
.Cells.Select()
.Cells.EntireColumn.AutoFit()
.Cells(1, 1).Select()
End With
excelBook2.Application.ActiveWorkbook.SaveAs("direccion& x & ".xlsx")
excelBook2.Application.ActiveWorkbook.Application.Quit()
xlApp2.Quit()
xlApp2 = Nothing
excelBook2 = Nothing
excelWorksheet2 = Nothing
GC.Collect()
End If
GC.Collect()
Valora esta pregunta


0