USO DE IRONXL

Cómo exportar Datagridview a Excel en C#

Publicado en 27 de enero, 2024
Compartir:

Este tutorial proporciona una guía completa sobre cómo exportar datos de unControl DataGridView en una aplicación Windows Forms a un archivo Excel utilizando la funciónIronXL 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()
{
    // Create a new DataTable.
    DataTable dataTable = new DataTable();
    // Define columns for the 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));
    // Add sample data to the DataTable.
    for (int i = 1; i <= 25; i++)
    {
        dataTable.Rows.Add(i, "Employee " + i, "Department " + (i % 5 + 1), DateTime.Now.AddDays(-i * 15));
    }
    // Bind the DataTable to the DataGridView.
    dataGridView1.DataSource = dataTable;
}
private void BindDataToDataGridView()
{
    // Create a new DataTable.
    DataTable dataTable = new DataTable();
    // Define columns for the 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));
    // Add sample data to the DataTable.
    for (int i = 1; i <= 25; i++)
    {
        dataTable.Rows.Add(i, "Employee " + i, "Department " + (i % 5 + 1), DateTime.Now.AddDays(-i * 15));
    }
    // Bind the DataTable to the DataGridView.
    dataGridView1.DataSource = dataTable;
}
Private Sub BindDataToDataGridView()
	' Create a new DataTable.
	Dim dataTable As New DataTable()
	' Define columns for the 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))
	' Add sample data to the 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
	' Bind the DataTable to the DataGridView.
	dataGridView1.DataSource = dataTable
End Sub
$vbLabelText   $csharpLabel

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)
{
    // Code to export data will go here
}
private void btnExport_Click(object sender, EventArgs e)
{
    // Code to export data will go here
}
Private Sub btnExport_Click(ByVal sender As Object, ByVal e As EventArgs)
	' Code to export data will go here
End Sub
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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++)
    {
        // Convert row and column index to Excel cell address format
        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++)
    {
        // Convert row and column index to Excel cell address format
        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
		' Convert row and column index to Excel cell address format
		Dim cellAddress As String = ConvertToCellAddress(i, j)
		worksheet (cellAddress).Value = dataGridView1.Rows (i).Cells (j).Value.ToString()
	Next j
Next i
$vbLabelText   $csharpLabel

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)
{
    // Columns in Excel are labeled as A, B, C, ..., Z, AA, AB, ..., etc.
    // The following code converts a column index to this format.
    string columnLabel = "";
    while (column >= 0)
    {
        columnLabel = (char)('A' + column % 26) + columnLabel;
        column = column / 26 - 1;
    }
    // Rows in Excel are labeled as 1, 2, 3, ..., n
    // Adding 1 because Excel is 1-based and our loop is 0-based.
    string rowLabel = (row + 1).ToString();
    return columnLabel + rowLabel;
}
private string ConvertToCellAddress(int row, int column)
{
    // Columns in Excel are labeled as A, B, C, ..., Z, AA, AB, ..., etc.
    // The following code converts a column index to this format.
    string columnLabel = "";
    while (column >= 0)
    {
        columnLabel = (char)('A' + column % 26) + columnLabel;
        column = column / 26 - 1;
    }
    // Rows in Excel are labeled as 1, 2, 3, ..., n
    // Adding 1 because Excel is 1-based and our loop is 0-based.
    string rowLabel = (row + 1).ToString();
    return columnLabel + rowLabel;
}
Private Function ConvertToCellAddress(ByVal row As Integer, ByVal column As Integer) As String
	' Columns in Excel are labeled as A, B, C, ..., Z, AA, AB, ..., etc.
	' The following code converts a column index to this format.
	Dim columnLabel As String = ""
	Do While column >= 0
		columnLabel = ChrW(AscW("A"c) + column Mod 26) & columnLabel
		column = column \ 26 - 1
	Loop
	' Rows in Excel are labeled as 1, 2, 3, ..., n
	' Adding 1 because Excel is 1-based and our loop is 0-based.
	Dim rowLabel As String = (row + 1).ToString()
	Return columnLabel & rowLabel
End Function
$vbLabelText   $csharpLabel

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)
$vbLabelText   $csharpLabel

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
{
    // Export logic
}
catch (Exception ex)
{
    MessageBox.Show("An exception occurred: " + ex.Message);
}
try
{
    // Export logic
}
catch (Exception ex)
{
    MessageBox.Show("An exception occurred: " + ex.Message);
}
Try
	' Export logic
Catch ex As Exception
	MessageBox.Show("An exception occurred: " & ex.Message)
End Try
$vbLabelText   $csharpLabel

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# yIronXL. 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 $749, 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!

Jordi Bardia

Jordi Bardia

Ingeniero de software

 LinkedIn |  Website

Jordi es más competente en Python, C# y C++, cuando no está aprovechando sus habilidades en Iron Software; está programando juegos. Compartiendo responsabilidades en las pruebas de productos, el desarrollo de productos y la investigación, Jordi añade un inmenso valor a la mejora continua de los productos. La variada experiencia le mantiene desafiado y comprometido, y dice que es uno de sus aspectos favoritos de trabajar con Iron Software. Jordi creció en Miami, Florida, y estudió Informática y Estadística en la Universidad de Florida.
< 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#