Componente .NET para la generación de hojas de cálculo de Excel 2003 usando plantillas para formatear

StackOverflow https://stackoverflow.com/questions/1405431

Pregunta

El problema que mi aplicación está tratando de resolver es el siguiente:

Actualmente, se ejecutan varios procedimientos almacenados, los datos se copian manualmente de los resultados de SQL en una hoja de cálculo en blanco y los analistas de informes formatean los datos. Este proceso se ha considerado demasiado largo y costoso.

La solución ideal (en mi opinión) es una aplicación .NET con un componente que puede tomar el resultado de un procedimiento almacenado y escribirlo en un rango de celdas específico en una plantilla de hoja de trabajo (mantener el formato de la plantilla) y luego puedo cotejar el resultados en libros de trabajo en la aplicación .NET.

¿Hay tales aplicaciones por ahí? Aún mejor, ¿alguien tiene mejores soluciones?

Gracias por su consideración.

¿Fue útil?

Solución

Lo que utilizo para configurar los datos

obtener los datos en forma de

object[,] excelSpreadsheetData

luego aplique los datos configurando

public void SetWorksheetData(long rowCount, long columnCount, object[,] excelSpreadsheetData, int startingRow, int startingCol, Worksheet worksheet)
        {
            if (rowCount == 0 || columnCount == 0) return;
            //set the region data.
            object m_objOpt = Missing.Value;
            Range cellRange = worksheet.get_Range(ExcelGeneratorUtils.ExcelColumnFromNumber(startingCol) + startingRow, m_objOpt);
            cellRange = cellRange.get_Resize(rowCount, columnCount);
            cellRange.set_Value(m_objOpt, excelSpreadsheetData);
        }

Esto debería mantener el formato de la plantilla, y establece los datos de una sola vez, mucho más rápido que configurando la celda, por celda.

Espero que ayude

Otros consejos

SpreadsheetGear for .NET le permitirá abrir libros de Excel, agregar valores y guardar el libro.

Puede ver ejemplos de informes de Excel (es decir, exportar a Excel) aquí y descargue una versión de prueba gratuita aquí .

Exención de responsabilidad: Soy propietario de SpreadsheetGear LLC

Siempre puedes usar Excel Automation a través de interoperabilidad. He hecho esto en ocasiones cuando la salida deseada es Excel. Es sorprendentemente rápido, pero debes tener cuidado de limpiar después de ti mismo y no dejar que se ejecuten las instancias de Excel. Aquí hay una breve muestra.

        using Excel = Microsoft.Office.Interop.Excel;

        Excel.ApplicationClass _Excel;
        Excel.Workbook WB;
        Excel.Worksheet WS;


        _Excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
        WB = _Excel.Workbooks.Add(System.Reflection.Missing.Value);

        WS = (Excel.Worksheet)WB.Worksheets[1]; 
        WS.Name = "Test";

         try
        {

            int row;
            int col;

            WS.Cells[++row, col] = "COL1";
            WS.Cells[row, ++col] = "COL2";

            WS.get_Range("A1", "A2").Font.Bold = true;
            WS.get_Range("A1", "A2").HorizontalAlignment                     =Excel.XlHAlign.xlHAlignCenter;

            WS.Cells[++row, col] = "Customer";
            WS.Cells[++row, col] = "Expenses" 

            WS.get_Range("A1", "B1").Font.Bold = true;


            WS.Columns.AutoFit();
            WS.Rows.AutoFit();

            WS.Activate();
           _Excel.Visible = true;
        }
        catch (Exception ex)
        {
            WB.Close(false, Type.Missing, Type.Missing);
            _Excel.Quit();
            throw;
        }
        finally
        {
            GC.Collect();
            GC.WaitForPendingFinalizers();



            System.Runtime.InteropServices.Marshal.FinalReleaseComObject(WS);


            System.Runtime.InteropServices.Marshal.FinalReleaseComObject(WB);

            System.Runtime.InteropServices.Marshal.FinalReleaseComObject(_Excel);


        }

En esta pregunta pedí algo similar. La diferencia es que quiero que algo genere un archivo XML que Excel interprete como una hoja de cálculo. Si pudiera enviar los datos a un archivo XML, luego transforme el XML a SpreadsheetML, entonces esto podría resolver su problema. Sin embargo, SpreadsheetXM tiene algunas limitaciones. No requerirá que se instale Excel y la transformación puede ser muy rápida. Y si usa Excel 2007, hay un segundo formato XML que puede usar, Microsoft Office XML formato. Básicamente, es lento porque sospecho que su código actual está interactuando con Excel a través de COM.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top