Visual Basic.NET - Exportar DataGrid en fichero excel csv

   
Vista:
Imágen de perfil de nano

Exportar DataGrid en fichero excel csv

Publicado por nano (20 intervenciones) el 28/07/2016 20:22:32
Muy buenas a todos!!!
Tengo creada una pequeña app para una vez insertados los registros en una tabla de SQL SERVER, pueda exportarlos a un fichero de excel.
El proceso se realiza correctamente excepto por un detalle que os comento. Cuando me sale la ventana de elegir la ubicación del fichero de excel, en la imagen adjunta aparece como "Buscar carpeta" debo de darle dos veces a Aceptar para que se me cierre.
El codigo del botón es el siguiente:

Private Sub btnexportar_Click(sender As Object, e As EventArgs) Handles btnexportar.Click
archivoguardar = InputBox("Ingrese el Nombre del archivo", "Nombre", "Cursos")
If Not archivoguardar = "" Then
If Not exportar_excel() Then
MsgBox("No se pudo ejecutar el archivo")
End If
exportar_excel()
End If
End Sub


Y el código de la función exportar es esta:

Private Function exportar_excel() As Boolean
Dim cadenaubicacion As String
Dim directorio As New FolderBrowserDialog
If directorio.ShowDialog = DialogResult.OK Then
cadenaubicacion = directorio.SelectedPath
Try
Dim stream As Stream
Dim escritor As StreamWriter
Dim fila = Datalistado.Rows.Count
Dim columnas = Datalistado.Columns.Count
Dim archivo As String = cadenaubicacion & "\" & archivoguardar & ".csv"
Dim linea As String = ""
Dim filadata, column As Int32

File.Delete(archivo)
stream = File.OpenWrite(archivo)
escritor = New StreamWriter(stream, System.Text.Encoding.UTF8)

For column = 1 To columnas - 1
linea = linea & Datalistado.Columns(column).Name & ";"
Next
linea = Mid(CStr(linea), 1, linea.ToString.Length - 1)
escritor.WriteLine(linea)
linea = Nothing
For filadata = 0 To fila - 1
For column = 1 To columnas - 1
linea = linea & CStr(Datalistado.Item(column, filadata).Value) & ";"
Next
linea = Mid(CStr(linea), 1, linea.ToString.Length - 1)
escritor.WriteLine(linea)
linea = Nothing
Next
escritor.Close()
Try
''Process.Start(archivo)
Return True
Catch ex As Exception
MsgBox(ex.Message)
Return False
End Try
Catch ex As Exception
MsgBox(ex.Message)
Return False
End Try
End If
Return False
End Function


Cual puede ser el error, que no acabo de ver, para que no se me cierre la ventana de "Buscar Carpeta" la primera vez que acepto y que realmente os confirmo que me exporta el excel?
Muchas gracias de antemano y saludos a todos!!



app1
app2
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Exportar DataGrid en fichero excel csv

Publicado por Miguel (346 intervenciones) el 28/07/2016 23:31:06
Hola,
El diálogo "Buscar carpeta" se muestra dos veces porque ejecutas dos veces la función "exportar_excel()"; quita la que está luego del primer "End If". Te recomiendo que uses el "SaveFileDialog" para seleccionar alguna ruta; te dejo un ejemplo a continuación:

1
2
3
4
5
6
7
Dim saveFD As SaveFileDialog= New SaveFileDialog()
saveFD.Title = "Exportar CSV"
saveFD.Filter = "Archivo CSV|*.csv"
If saveFD.ShowDialog() = DialogResult.OK
   Dim ruta As String = saveFD.Filename
   ''código para exportar
End If
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de nano

Exportar DataGrid en fichero excel csv

Publicado por nano (20 intervenciones) el 29/07/2016 00:34:47
Muchas gracias, Miguel!! Has acertado de pleno.
Ya se me cierra una vez le doy a Aceptar.
Sobre la selección de una ruta, me lo hace perfectamente con este código:

Private Function exportar_excel() As Boolean
Dim cadenaubicacion As String
Dim directorio As New FolderBrowserDialog
If directorio.ShowDialog = DialogResult.OK Then
cadenaubicacion = directorio.SelectedPath


Y otro detalle que quisiera aclarar es que tengo una columna en el datagrid llamada Eliminar como un checkbox que sólo aparece si marco el checkbox de eliminar pero que no quiero que me la exporte al csv, por lo que empiezo desde la columna = 1 en vez de la 0.
Lo aclaro por si alguien quisiera recuperar este código, que la primera columna no se la va a exportar.
Gracias de nuevo Miguel por la aportación, por el interés mostrado y por tus consejos que son lo que mas nos aportan y ayudan a todos.
Un saludo,
Nano.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar