Conexión a Excel
Publicado por Daniel (18 intervenciones) el 20/01/2017 22:40:44
Buenas,
Estoy haciendo un programa con Visual Basic 2015,
Consiste en que el usuario tiene que ir seleccionando datos de combobox, rellenado textbox etc para que luego le muestre un resultado.
Como los cálculos son complejos y se precisa de bastantes datos, se quiere realizar una conexión a excel.
En este excel traslado los datos introducidos en el programa y realizo los cálculos para a continuación coger los resultados y traerlos de nuevo al programa. He conseguido abrir el excel que tengo e introducir valores y poder coger los resultados. El problema es que, solo soy capaz de abrir y cerrar el excel cuando pulso un button, es decir el codigo está implementado en un boton y cuando le pulso, abre el excel trabaja y rellena los campos del programa con los resultados, pero el excel se abre y cierra. Mi intención es tener el excel abierto en segundo plano (así el usuario no vería que se trabaja con ese excel y va obteniendo los resultados) Pero no soy capaz de abrirlo y mantenerlo abierto hasta que yo quiera.
He estado mirando para usar BackgroundWorker con DoWork pero no encuentro la manera.
Por ahora esto es lo que tengo. Funciona pero cada vez que quiero cambiar algun dato el programa se queda parado, ya que tiene que abrir el excel trabajar y cerrarlo.
Además, la última parte "Private Sub releaseObject(ByVal obj As Object)...." no se muy bien para que sirve.. No se si tendría que estar o no.
Espero me puedan ayudar.
Muchas gracias.
Saludos.
Estoy haciendo un programa con Visual Basic 2015,
Consiste en que el usuario tiene que ir seleccionando datos de combobox, rellenado textbox etc para que luego le muestre un resultado.
Como los cálculos son complejos y se precisa de bastantes datos, se quiere realizar una conexión a excel.
En este excel traslado los datos introducidos en el programa y realizo los cálculos para a continuación coger los resultados y traerlos de nuevo al programa. He conseguido abrir el excel que tengo e introducir valores y poder coger los resultados. El problema es que, solo soy capaz de abrir y cerrar el excel cuando pulso un button, es decir el codigo está implementado en un boton y cuando le pulso, abre el excel trabaja y rellena los campos del programa con los resultados, pero el excel se abre y cierra. Mi intención es tener el excel abierto en segundo plano (así el usuario no vería que se trabaja con ese excel y va obteniendo los resultados) Pero no soy capaz de abrirlo y mantenerlo abierto hasta que yo quiera.
He estado mirando para usar BackgroundWorker con DoWork pero no encuentro la manera.
Por ahora esto es lo que tengo. Funciona pero cada vez que quiero cambiar algun dato el programa se queda parado, ya que tiene que abrir el excel trabajar y cerrarlo.
Además, la última parte "Private Sub releaseObject(ByVal obj As Object)...." no se muy bien para que sirve.. No se si tendría que estar o no.
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
Private Sub ComboBox2_TextChanged(sender As Object, e As EventArgs) Handles ComboBox2.TextChanged
Dim filetest As String = "C:\Datos entrada.xlsx"
Dim oExcel As Object
oExcel = CreateObject("Excel.Application")
oExcel.Workbooks.Open(filetest)
Dim oBook As Microsoft.Office.Interop.Excel.Workbook
Dim oSheet As Microsoft.Office.Interop.Excel.Worksheet
oBook = oExcel.ActiveWorkbook
oSheet = oExcel.Worksheets(3)
'Modificamos valores
oSheet.Range("R59").Value = ComboBox3.Text
TextBox9.Text = oSheet.Range("AR60").Value
TextBox12.Text = oSheet.Range("AR59").Value
'Guardamos
oExcel.DisplayAlerts = False
oBook.SaveAs(filetest, 51) '51 es xlsx / 1 es xls
oBook.Close()
oExcel.Quit()
oBook = Nothing
releaseObject(oExcel)
releaseObject(oSheet)
End Sub
Private Sub releaseObject(ByVal obj As Object)
Try
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
obj = Nothing
Catch ex As Exception
obj = Nothing
Finally
GC.Collect()
End Try
End Sub
Espero me puedan ayudar.
Muchas gracias.
Saludos.
Valora esta pregunta
0