[WinForms – How To] Exportar DataGridView a Excel

[WinForms – How To] Exportar DataGridView a Excel

En este caso quisiera exponer una forma de exportar una grilla a Excel. La forma de exportar, de manera manual sería la de copiar toda la grilla y pegar en el Excel. Sencillo , ¿No?. Pero el tema es que lo haremos de forma automática.

La idea es colocar un control DataGridView y un botón Exportar: 1 Por código, creamos un método llamado CopiarGrilla() que copiará datos de la grilla para poder exportarlos:


private void CopiarGrilla()
{
dataGridView1.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText;
dataGridView1.MultiSelect = true;
dataGridView1.SelectAll();
DataObject dataObj = dataGridView1.GetClipboardContent();
if (dataObj != null)
Clipboard.SetDataObject(dataObj);

dataGridView1.MultiSelect = false;
dataGridView1.ClipboardCopyMode = DataGridViewClipboardCopyMode.Disable;
}

Luego, crearemos el método ExportarAExcel() que nos permitirá realizar el proceso de exportación simulando el copiado y pegado.


private void ExportarAExcel()
{
this.CopiarGrilla();

Microsoft.Office.Interop.Excel.Application xlexcel;
Microsoft.Office.Interop.Excel.Workbook xlWorkBook;
Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet;
object valor = System.Reflection.Missing.Value;
xlexcel = new Microsoft.Office.Interop.Excel.Application();
xlexcel.Visible = true;
xlWorkBook = xlexcel.Workbooks.Add(valor);
xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
Microsoft.Office.Interop.Excel.Range CR = (Microsoft.Office.Interop.Excel.Range)xlWorkSheet.Cells[1, 1];
CR.Select();
xlWorkSheet.PasteSpecial(CR, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, true);

MessageBox.Show("Exportación finalizada");
}

Exponemos todo el código:


private void CargarGrilla()
{
int i = 1;

DataTable dt = new DataTable();
DataColumn dcPais = new DataColumn("Nombre", typeof(string));
DataColumn dcAbreviacion = new DataColumn("Abreviacion", typeof(string));

dt.Columns.Add(dcPais);
dt.Columns.Add(dcAbreviacion);

do
{
DataRow dr = dt.NewRow();
dr["Nombre"] = "Pais" + i.ToString();
dr["Abreviacion"] = "Abr" + i.ToString();
i++;
dt.Rows.Add(dr);
}
while (i <= 10);

dataGridView1.DataSource = dt;
}

private void CopiarGrilla()
{
dataGridView1.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText;
dataGridView1.MultiSelect = true;
dataGridView1.SelectAll();
DataObject dataObj = dataGridView1.GetClipboardContent();
if (dataObj != null)
Clipboard.SetDataObject(dataObj);

dataGridView1.MultiSelect = false;
dataGridView1.ClipboardCopyMode = DataGridViewClipboardCopyMode.Disable;

}

private void ExportarAExcel()
{
this.CopiarGrilla();

Microsoft.Office.Interop.Excel.Application xlexcel;
Microsoft.Office.Interop.Excel.Workbook xlWorkBook;
Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet;
object valor = System.Reflection.Missing.Value;
xlexcel = new Microsoft.Office.Interop.Excel.Application();
xlexcel.Visible = true;
xlWorkBook = xlexcel.Workbooks.Add(valor);
xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
Microsoft.Office.Interop.Excel.Range CR = (Microsoft.Office.Interop.Excel.Range)xlWorkSheet.Cells[1, 1];
CR.Select();
xlWorkSheet.PasteSpecial(CR, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, true);

MessageBox.Show("Exportación finalizada");
}

private void Form1_Load(object sender, EventArgs e)
{
this.CargarGrilla();

}

private void exportarExcel_Click(object sender, EventArgs e)
{
this.ExportarAExcel();
}

Al final nuestra aplicación quedaría así: 2 Y nuestro excel se vería de esta forma: 3

Existen muchas formas de realizar una exportación a Excel, en este caso, me pareció buena idea presentarlo así.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.