[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:
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í:
Y nuestro excel se vería de esta forma:
Existen muchas formas de realizar una exportación a Excel, en este caso, me pareció buena idea presentarlo así.




