domingo, 18 de junio de 2017

Exportar Datagrid a Excel C#

Hola Exportar a Excel es algo muy común que requieren nuestras aplicaciones que trabajan con datos, siempre es útil poder permitir a nuestros usuarios manipular sus datos desde excel

Primero que nada es necesario importar la librería de Office:

using Microsoft.Office.Interop.Excel;

General mente se encuentra en:


C:\Program Files (x86)\Microsoft Visual Studio 14.0\Visual Studio Tools for Office\PIA\Office15\Microsoft.Office.Interop.Excel.dll

La función es la siguiente:

public void _Exportar(System.Data.DataTable dgvDatos)
        {

            try
            {
                string temp;
                int iColumnas = 0;
                //Inicializacion de la conexion
                Microsoft.Office.Interop.Excel.Application xlsApp = new Microsoft.Office.Interop.Excel.Application();
             
                //Objento de Sheet
                Worksheet xlsSheet;
                //Objento de Libro
                Workbook xlsBook;
                //Indica si se ve el Excel o no
                xlsApp.Visible = false;

                xlsBook = xlsApp.Workbooks.Add(true);
                xlsSheet = (Worksheet)xlsBook.ActiveSheet;

                //Inicia a leer el datagrid para preparar la cabecera
                for (int iCol = 0; iCol < dgvDatos.Columns.Count; iCol++)
                {
                    iColumnas++;
                    //Agrega la cabecera a la hoja
                    xlsSheet.Cells[1, iColumnas] = dgvDatos.Columns[iCol].ColumnName;
                }

                for (int iRow = 0; iRow < dgvDatos.Rows.Count; iRow++)
                {
                    int Col = 0;
                    for (int iCol = 0; iCol < dgvDatos.Columns.Count; iCol++)
                    {
                        Col++;
                        temp = dgvDatos.Rows[iRow].ItemArray[iCol].ToString();
                        xlsSheet.Cells[iRow + 2, Col] = temp;

                    }
                }

                xlsSheet.Columns.AutoFit(); //Ajusta ancho de todas las columnas
                xlsApp.Visible = true;
                //xlsApp.Quit();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error: " + ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

Espero les sea útil.