USO DE IRONXL

Cómo exportar Datagridview a Excel en C#

Actualizado 27 de enero, 2024
Compartir:

Este tutorial proporciona una guía completa sobre cómo exportar datos de un Control DataGridView en una aplicación Windows Forms a un archivo Excel utilizando la función IronXL en C#. Nos centraremos en crear una experiencia fluida para los principiantes que deseen integrar la funcionalidad de Microsoft Excel en sus proyectos de C#.

Cómo Exportar DataGridView a Excel en C#

  1. Cree un proyecto C# Windows Forms en Visual Studio.
  2. Instale la Biblioteca Excel utilizando NuGet Package Manager.
  3. Crear un DataGridView y un botón en el Windows Form UI.
  4. Adjuntar una fuente de datos al DataGridView.
  5. Aplique la lógica de exportación de datos en el controlador de eventos de clic del botón.

Primeros pasos con IronXL

IronXL es una robusta biblioteca que simplifica el proceso de trabajar con documentos Excel en aplicaciones .NET Framework. Permite exportar archivos Excel de gran tamaño, manejar fuentes de datos complejas y proporcionar un amplio soporte para la manipulación de archivos .NET Excel sin necesidad de disponer de la biblioteca de objetos de Microsoft Excel. Vamos a configurar nuestro proyecto.

Configuración del proyecto

1. Crear una nueva aplicación Windows Forms

Abra Visual Studio y cree una nueva aplicación Windows Forms. Esta será la base de nuestro proyecto donde implementaremos la funcionalidad para exportar datos DataGridView a un archivo Excel.

Cómo Exportar DataGridView a Excel en C#: Figura 1 - Creación de una nueva aplicación Windows Forms en Visual Studio

2. Instalar IronXL

IronXL puede añadirse fácilmente a su proyecto. En Visual Studio, vaya a la opción "Administrar paquetes NuGet", busque IronXL e instálelo. Esta acción se encargará de todas las dependencias necesarias para exportar DataGridView a Excel en C#.

Cómo Exportar DataGridView a Excel en C#: Figura 2 - Instalación de la librería IronXL a través de NuGet Package Manager

3. Preparar la interfaz de usuario

Añada un control DataGridView a su formulario. Este control contendrá los datos que pretendemos exportar. Además, añada un botón para activar el proceso de exportación. Puedes etiquetarlo como 'Exportar a Excel' o algo similar.

Implantación de la función de exportación

En esta sección, enseñaremos los detalles de cómo programar la funcionalidad que permite exportar datos desde un DataGridView en una aplicación Windows Forms a un documento Excel utilizando IronXL.

Creación de la aplicación

En primer lugar, debe añadir un control DataGridView a su formulario. Este control es el componente principal donde se mostrarán sus datos antes de ser exportados. Puedes añadirlo fácilmente arrastrando un DataGridView de la caja de herramientas de Visual Studio a tu formulario. También podemos añadir un botón para exportar los datos de DataGridView a archivos Excel.

Cómo Exportar DataGridView a Excel en C#: Figura 3 - Añadir un botón para exportar los datos de DataGridView a un archivo Excel.

El siguiente paso es cargar los datos en el DataGridView. Estos datos pueden proceder de diversas fuentes, como una Tabla de datos o un Conjunto de datos. Si está empezando, puede crear un nuevo DataSet o DataTable mediante programación y rellenarlo con datos de ejemplo para ver cómo funciona. También puede importar datos de una fuente externa. La clave aquí es vincular su fuente de datos a la DataGridView, que efectivamente vincula sus datos a la cuadrícula. Una vez que sus datos estén vinculados al DataGridView, los verá mostrados en la cuadrícula de su formulario.

private void BindDataToDataGridView()
{
    //  Crear una nueva DataTable.
    DataTable dataTable = new DataTable();
    //  Definir columnas para la DataTable.
    dataTable.Columns.Add("Employee ID", typeof(int));
    dataTable.Columns.Add("Name", typeof(string));
    dataTable.Columns.Add("Department", typeof(string));
    dataTable.Columns.Add("Joining Date", typeof(DateTime));
    //  Añade datos de ejemplo a la DataTable.
    for (int i = 1; i <= 25; i++)
    {
        dataTable.Rows.Add(i, "Employee " + i, "Department " + (i % 5 + 1), DateTime.Now.AddDays(-i * 15));
    }
    //  Vincula la DataTable a la DataGridView.
    dataGridView1.DataSource = dataTable;
}
private void BindDataToDataGridView()
{
    //  Crear una nueva DataTable.
    DataTable dataTable = new DataTable();
    //  Definir columnas para la DataTable.
    dataTable.Columns.Add("Employee ID", typeof(int));
    dataTable.Columns.Add("Name", typeof(string));
    dataTable.Columns.Add("Department", typeof(string));
    dataTable.Columns.Add("Joining Date", typeof(DateTime));
    //  Añade datos de ejemplo a la DataTable.
    for (int i = 1; i <= 25; i++)
    {
        dataTable.Rows.Add(i, "Employee " + i, "Department " + (i % 5 + 1), DateTime.Now.AddDays(-i * 15));
    }
    //  Vincula la DataTable a la DataGridView.
    dataGridView1.DataSource = dataTable;
}
Private Sub BindDataToDataGridView()
	'  Crear una nueva DataTable.
	Dim dataTable As New DataTable()
	'  Definir columnas para la DataTable.
	dataTable.Columns.Add("Employee ID", GetType(Integer))
	dataTable.Columns.Add("Name", GetType(String))
	dataTable.Columns.Add("Department", GetType(String))
	dataTable.Columns.Add("Joining Date", GetType(DateTime))
	'  Añade datos de ejemplo a la DataTable.
	For i As Integer = 1 To 25
		dataTable.Rows.Add(i, "Employee " & i, "Department " & (i Mod 5 + 1), DateTime.Now.AddDays(-i * 15))
	Next i
	'  Vincula la DataTable a la DataGridView.
	dataGridView1.DataSource = dataTable
End Sub
VB   C#

Manejo del evento de clic de botón

Nuestro principal punto de interacción con el usuario será un botón dentro de nuestro Windows Form. Al hacer clic en este botón, se inicia el proceso de exportación. A continuación te explicamos cómo configurar esta interacción:

  • En tu Windows Form, deberías tener un botón dedicado a exportar los datos del DataGridView.
  • Este botón tiene un método manejador de eventos en su código C#. Este método se activa cuando el usuario pulsa el botón.
private void btnExport_Click(object sender, EventArgs e)
{
    //  El código para exportar datos irá aquí
}
private void btnExport_Click(object sender, EventArgs e)
{
    //  El código para exportar datos irá aquí
}
Private Sub btnExport_Click(ByVal sender As Object, ByVal e As EventArgs)
	'  El código para exportar datos irá aquí
End Sub
VB   C#

Exportar datos desde DataGridView

Para exportar los datos de DataGridView, primero tenemos que hacer referencia al espacio de nombres IronXL:

using IronXL;
using IronXL;
Imports IronXL
VB   C#

Dentro del manejador de eventos, el primer paso es inicializar un nuevo libro y hoja de trabajo utilizando IronXL. Aquí es donde nuestros datos de la DataGridView serán transferidos.

  • Un objeto WorkBook representa el archivo Excel completo.
  • Una Hoja de Trabajo dentro del libro es como una página individual o pestaña en un archivo Excel.

    Aquí creamos un libro de trabajo y le añadimos una hoja de cálculo. La hoja de cálculo se llama "ExportedData", pero puede elegir cualquier nombre que se adapte al contexto de su aplicación.

WorkBook workbook = new WorkBook();
WorkSheet worksheet = workbook.CreateWorkSheet("ExportedData");
WorkBook workbook = new WorkBook();
WorkSheet worksheet = workbook.CreateWorkSheet("ExportedData");
Dim workbook As New WorkBook()
Dim worksheet As WorkSheet = workbook.CreateWorkSheet("ExportedData")
VB   C#

Rellenar la hoja Excel

El siguiente paso consiste en recorrer las filas y columnas de DataGridView y copiar los datos de cada celda en la celda correspondiente de la hoja de cálculo de Excel.

  • El bucle externo avanza por cada fila, mientras que el bucle interno recorre cada columna dentro de la fila correspondiente.
  • Asignamos el valor de cada celda del DataGridView a la celda correspondiente de la hoja de cálculo de Excel. Para ello se utilizan los índices i (para filas) y j (para columnas).
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
    for (int j = 0; j < dataGridView1.Columns.Count; j++)
    {
        //  Convertir el índice de filas y columnas en formato de dirección de celda de Excel
        string cellAddress = ConvertToCellAddress(i, j);
        worksheet [cellAddress].Value = dataGridView1.Rows [i].Cells [j].Value.ToString();
    }
}
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
    for (int j = 0; j < dataGridView1.Columns.Count; j++)
    {
        //  Convertir el índice de filas y columnas en formato de dirección de celda de Excel
        string cellAddress = ConvertToCellAddress(i, j);
        worksheet [cellAddress].Value = dataGridView1.Rows [i].Cells [j].Value.ToString();
    }
}
For i As Integer = 0 To dataGridView1.Rows.Count - 1
	For j As Integer = 0 To dataGridView1.Columns.Count - 1
		'  Convertir el índice de filas y columnas en formato de dirección de celda de Excel
		Dim cellAddress As String = ConvertToCellAddress(i, j)
		worksheet (cellAddress).Value = dataGridView1.Rows (i).Cells (j).Value.ToString()
	Next j
Next i
VB   C#

Para convertir los índices de fila y columna en una dirección de celda de Excel, puede utilizar un método auxiliar como el siguiente:

private string ConvertToCellAddress(int row, int column)
{
    //  Las columnas en Excel se etiquetan como A, B, C, ..., Z, AA, AB, ..., etc.
    //  El siguiente código convierte un índice de columna a este formato.
    string columnLabel = "";
    while (column >= 0)
    {
        columnLabel = (char)('A' + column % 26) + columnLabel;
        column = column / 26 - 1;
    }
    //  Las filas en Excel se etiquetan como 1, 2, 3, ..., n
    //  Sumando 1 porque Excel está basado en 1 y nuestro bucle está basado en 0.
    string rowLabel = (row + 1).ToString();
    return columnLabel + rowLabel;
}
private string ConvertToCellAddress(int row, int column)
{
    //  Las columnas en Excel se etiquetan como A, B, C, ..., Z, AA, AB, ..., etc.
    //  El siguiente código convierte un índice de columna a este formato.
    string columnLabel = "";
    while (column >= 0)
    {
        columnLabel = (char)('A' + column % 26) + columnLabel;
        column = column / 26 - 1;
    }
    //  Las filas en Excel se etiquetan como 1, 2, 3, ..., n
    //  Sumando 1 porque Excel está basado en 1 y nuestro bucle está basado en 0.
    string rowLabel = (row + 1).ToString();
    return columnLabel + rowLabel;
}
Private Function ConvertToCellAddress(ByVal row As Integer, ByVal column As Integer) As String
	'  Las columnas en Excel se etiquetan como A, B, C, ..., Z, AA, AB, ..., etc.
	'  El siguiente código convierte un índice de columna a este formato.
	Dim columnLabel As String = ""
	Do While column >= 0
		columnLabel = ChrW(AscW("A"c) + column Mod 26) & columnLabel
		column = column \ 26 - 1
	Loop
	'  Las filas en Excel se etiquetan como 1, 2, 3, ..., n
	'  Sumando 1 porque Excel está basado en 1 y nuestro bucle está basado en 0.
	Dim rowLabel As String = (row + 1).ToString()
	Return columnLabel & rowLabel
End Function
VB   C#

Guardar el archivo Excel

Una vez transferidos todos los datos, el siguiente paso es guardar este libro como un archivo Excel. Este paso crea un archivo Excel en su sistema en la ruta especificada.

workbook.SaveAs("DataGridViewExport.xlsx");
MessageBox.Show("Data exported successfully!", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
workbook.SaveAs("DataGridViewExport.xlsx");
MessageBox.Show("Data exported successfully!", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
workbook.SaveAs("DataGridViewExport.xlsx")
MessageBox.Show("Data exported successfully!", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information)
VB   C#

Tratamiento de errores

En cualquier proceso de exportación de datos, la gestión de excepciones es vital para garantizar la estabilidad de la aplicación. Envolver la lógica de exportación en un bloque try-catch garantiza que cualquier problema que surja durante la exportación (como permisos de acceso a archivos, problemas de formato de datos, etc.) se detectan y se gestionan con elegancia.

try
{
    //  Lógica de exportación
}
catch (Exception ex)
{
    MessageBox.Show("An exception occurred: " + ex.Message);
}
try
{
    //  Lógica de exportación
}
catch (Exception ex)
{
    MessageBox.Show("An exception occurred: " + ex.Message);
}
Try
	'  Lógica de exportación
Catch ex As Exception
	MessageBox.Show("An exception occurred: " & ex.Message)
End Try
VB   C#

Salida

Una vez que ejecutemos el programa, aparecerá esta interfaz:

Cómo Exportar DataGridView a Excel en C#: Figura 4 - Formulario de salida del código anterior

Aquí puedes ver que los datos se muestran en el DataGridView. Ahora, haga clic en el botón Exportar. Exportará los datos del DataGridView al archivo Excel.

Cómo Exportar DataGridView a Excel en C#: Figura 5 - Mensaje de Exportación Exitosa

Aquí puede ver que aparece un cuadro de mensaje y los datos se exportan al archivo Excel. Aquí está el archivo Excel de salida:

Cómo Exportar DataGridView a Excel en C#: Figura 6 - El archivo Excel de salida de la exportación de la forma anterior

Conclusión

Siguiendo esta guía, ahora dispone de una herramienta básica pero potente para exportar datos DataGridView a un archivo Excel utilizando C# y IronXL. Esta funcionalidad es crucial para las aplicaciones que requieren análisis de datos, elaboración de informes o, simplemente, transferencia de datos entre distintos formatos. Recuerde que experimentar con distintas funciones del control DataGridView y la biblioteca IronXL puede conducir a implementaciones más personalizadas y avanzadas.

IronXL ofrece un **Prueba gratuita que puedes utilizar para explorar sus funciones. La licencia parte de $599, lo que supone una inversión que merece la pena para profesionales y organizaciones que buscan una solución fiable y eficaz para la manipulación de archivos Excel en aplicaciones .NET.

Tu viaje no termina aquí. Siga explorando más funciones de IronXL y otras formas de mejorar sus aplicaciones Windows Forms. Feliz codificación!

< ANTERIOR
Cómo leer un archivo Excel en una aplicación de consola C#
SIGUIENTE >
Cómo leer datos de un archivo CSV y almacenarlos en una base de datos C#

¿Listo para empezar? Versión: 2024.7 recién publicada

Descarga gratuita de NuGet Descargas totales: 897,936 Ver licencias >
123