Componente .NET per la generazione di fogli di calcolo Excel 2003 utilizzando modelli per la formattazione

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

Domanda

Il problema che la mia applicazione sta cercando di risolvere è questo:

Attualmente vengono eseguite diverse procedure memorizzate, i dati vengono copiati manualmente dai risultati SQL in un foglio di calcolo vuoto e gli analisti di report formattano i dati. Questo processo è stato ritenuto troppo lungo e costoso.

La soluzione ideale (nella mia mente) è un'applicazione .NET con un componente che può prendere un risultato della procedura memorizzata e scriverlo in un intervallo di celle specifico in un modello di foglio di lavoro (mantenendo la formattazione del modello) e quindi posso semplicemente fascicolare il risulta nelle cartelle di lavoro nell'applicazione .NET.

Esistono tali applicazioni là fuori? Ancora meglio, qualcuno ha soluzioni migliori?

Grazie per la tua considerazione.

È stato utile?

Soluzione

Quello che uso per impostare i dati

ottieni i dati sotto forma di

object[,] excelSpreadsheetData

quindi applica i dati impostando

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);
        }

Ciò dovrebbe mantenere la formattazione del modello e impostare i dati in una volta sola, molto più velocemente dell'impostazione cella per cella.

Spero che aiuti

Altri suggerimenti

SpreadsheetGear per .NET ti consentirà di aprire cartelle di lavoro di Excel, inserire valori e salvare la cartella di lavoro.

Puoi vedere esempi di Excel Reporting (es. esportazione in Excel) qui e scarica una prova gratuita qui .

Disclaimer: possiedo SpreadsheetGear LLC

È sempre possibile utilizzare l'automazione di Excel tramite l'interoperabilità. L'ho fatto occasionalmente quando l'output desiderato è Excel. È sorprendentemente veloce, devi fare attenzione a ripulire dopo te stesso e non lasciare in esecuzione istanze di Excel. Ecco un breve esempio.

        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);


        }

In questa domanda ho chiesto qualcosa di simile. La differenza è che voglio qualcosa per generare un file XML che viene interpretato da Excel come un foglio di calcolo. Se potessi inviare i dati in un file XML, quindi trasformare l'XML in SpreadsheetML, questo potrebbe risolvere il tuo problema. SpreadsheetXM ha alcune limitazioni, però. Non richiede l'installazione di Excel e la trasformazione può essere molto rapida. E se si utilizza Excel 2007, è possibile utilizzare un secondo formato XML, Microsoft Office XML formato. Fondamentalmente, è lento perché sospetto che il tuo codice attuale stia interagendo con Excel tramite COM.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top