none
Exportar gran cantidad de registros a Excel 2007 RRS feed

  • Pregunta

  • Buenas tardes, quisiera saber si me pueden dar una luz como exportar un datatable con mas de 100 mil registros y 100 columnas cada uno a excel 2007.

    Lo hago de la manera tradicional y se demora demasiado.

     Excel.Application oXL;
            Excel._Workbook oWB;
            Excel._Worksheet oSheet;
            Excel.Range oRng;
            DataTable _table;

    oXL = new Excel.Application();
                oXL.ScreenUpdating = false;
                oXL.Visible = false;

    oWB = (Excel._Workbook)(oXL.Workbooks.Add(Missing.Value));
                oSheet = (Excel._Worksheet)oWB.ActiveSheet;

    List<int> lColumns = new List<int>(); //Lista de indices de columnas a Exportar

    nTotColumns = lColumns.Count;
                    for (int nRow = 0; nRow < nTotRows; nRow++) //Recorro Registros
                    {
                        DataRow row = _table.Rows[nRow];
                        nCol = 1;
                        int nRowCell = nRow + 2;
                        //oRng = (Excel.Range)oSheet.Rows[2];
                        foreach (int iCol in lColumns) //Recorro Columnas
                        {
                            oSheet.Cells[nRowCell, iCol] = row[iCol].ToString();
                        }
                    }
                    
                    oSheet.SaveAs(fileName);


    Jorge Aguilar S.

    miércoles, 20 de junio de 2012 23:11

Respuestas

  • mm recorriendo registro por registro no veo que sea lo mejor

    no has probado usando

    closedXml

    conn esta libreria puedes exportar a excel 2007 o superior

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    miércoles, 20 de junio de 2012 23:30
  • Una alternativa que se me ocurre:

    Salva los datos en un fichero CSV, cosa que puedes hacer a gran velocidad con un StreamWriter. Después usa automatización OLE (como estabas haciendo en tu ejemplo original) para decirle a Excel que lea el CSV, y a continuación que lo salve como XSLX. Esto es mucho más rápido que insertar las celdas una por una mediante automatización OLE.

    jueves, 21 de junio de 2012 5:44
    Moderador

Todas las respuestas

  • mm recorriendo registro por registro no veo que sea lo mejor

    no has probado usando

    closedXml

    conn esta libreria puedes exportar a excel 2007 o superior

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    miércoles, 20 de junio de 2012 23:30
  • Una alternativa que se me ocurre:

    Salva los datos en un fichero CSV, cosa que puedes hacer a gran velocidad con un StreamWriter. Después usa automatización OLE (como estabas haciendo en tu ejemplo original) para decirle a Excel que lea el CSV, y a continuación que lo salve como XSLX. Esto es mucho más rápido que insertar las celdas una por una mediante automatización OLE.

    jueves, 21 de junio de 2012 5:44
    Moderador
  • Leandro, muchas gracias si probe con closedXml pero tambien se demora al generarlo. muchas gracias, mi solucion fue generarlo grabandolo como archivo .csv delimitados por puntos y comas, claro que se pierde el formato, pero en este caso lo importante es la data, 135 mil registros y 70 columnas por cada registro.

    Muchas Gracias


    Jorge Aguilar S.

    jueves, 21 de junio de 2012 15:26
  • Alberto muchas gracias lo genere como archivo .csv, al generarlo como archivo plano, solo fueron unos pocos segundos.

    Muchas Gracias.


    Jorge Aguilar S.

    jueves, 21 de junio de 2012 15:27