Composant .NET pour la génération de feuille de calcul Excel 2003 à l'aide de modèles de formatage

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

Question

Le problème que mon application tente de résoudre est le suivant:

Actuellement, plusieurs procédures stockées sont exécutées, les données sont manuellement copiées à partir des résultats SQL dans une feuille de calcul vierge et les analystes du rapport formulent les données. Ce processus a été jugé trop long et coûteux.

La solution idéale (dans mon esprit) est une application .NET avec un composant qui peut prendre un résultat de procédure stockée et l'écrire dans une plage de cellules spécifique dans un modèle de feuille de calcul (en conservant la mise en forme du modèle). résultats dans des classeurs dans l'application .NET.

Existe-t-il de telles applications? Mieux encore, est-ce que quelqu'un a de meilleures solutions?

Merci de votre attention.

Était-ce utile?

La solution

Ce que j'utilise pour définir les données

obtenir les données sous la forme de

object[,] excelSpreadsheetData

puis appliquez les données en définissant

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

Ceci devrait conserver la mise en forme du modèle et définir les données en une seule fois, beaucoup plus rapidement que la définition cellule par cellule.

L’espoir que cela aide

Autres conseils

SpreadsheetGear pour .NET vous permet d'ouvrir des classeurs Excel, d'insérer des valeurs et d'enregistrer le classeur.

Vous pouvez voir des exemples de rapports Excel (c.-à-d., exportation vers Excel) ici et téléchargez une version d'essai gratuite ici .

Clause de non-responsabilité: je possède SpreadsheetGear LLC

Vous pouvez toujours utiliser Excel Automation via interop. Je l'ai fait à l'occasion lorsque la sortie souhaitée est Excel. C'est étonnamment rapide, vous devez cependant prendre soin de nettoyer après vous-même et de ne pas laisser les instances d'Excel en cours d'exécution. Voici un bref exemple.

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


        }

Dans cette question , j'ai demandé quelque chose de similaire. La différence est que je veux quelque chose pour générer un fichier XML qui est interprété par Excel comme une feuille de calcul. Si vous pouviez envoyer les données dans un fichier XML, puis transformer le fichier XML en SpreadsheetML, cela pourrait résoudre votre problème. SpreadsheetXM a cependant quelques limitations. Excel ne doit pas être installé et la transformation peut être très rapide. Et si vous utilisez Excel 2007, vous pouvez utiliser un deuxième format XML, le Microsoft Office XML format. En gros, c'est lent parce que je soupçonne que votre code actuel interagit avec Excel via COM.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top