.net création - Créer un fichier Excel(.XLS et.XLSX)à partir de C#



create file (25)

Comment puis-je créer une feuille de calcul Excel avec C # sans nécessiter l'installation d'Excel sur la machine qui exécute le code?


Answers

Quelques automatisations Excel utiles en C #, vous pouvez trouver à partir du lien suivant.

http://csharp.net-informations.com/excel/csharp-excel-tutorial.htm

boulonner.


Avez-vous déjà essayé sylk?

Nous avions l'habitude de générer des excelsheets dans asp classique comme sylk et en ce moment nous cherchons aussi un excelgenerater.

Les avantages pour sylk sont, vous pouvez mettre en forme les cellules.


IKVM + POI

Ou, vous pouvez utiliser l'Interop ...


Le moyen le plus simple et le plus rapide de créer un fichier Excel à partir de C # est d'utiliser l'outil de productivité Open XML. L'outil de productivité Open XML est livré avec l'installation Open XML SDK. L'outil reverse engineering n'importe quel fichier Excel en code C #. Le code C # peut ensuite être utilisé pour générer de nouveau ce fichier.

Un aperçu du processus impliqué est:

  1. Installez le SDK Open XML avec l'outil.
  2. Créez un fichier Excel en utilisant le dernier client Excel avec le look désiré. Nommez-le DesiredLook.xlsx .
  3. Avec l'outil ouvrir DesiredLook.xlsx et cliquez sur le bouton Reflect Code près du haut.
  4. Le code C # de votre fichier sera généré dans le volet droit de l'outil. Ajoutez ceci à votre solution C # et générez des fichiers avec l'apparence souhaitée.

En prime, cette méthode fonctionne pour tous les fichiers Word et PowerPoint. En tant que développeur C #, vous allez ensuite apporter des modifications au code pour l'adapter à vos besoins.

J'ai développé une application WPF simple sur github qui fonctionnera sous Windows à cette fin. Il existe une classe d'espace réservé appelée GeneratedClass laquelle vous pouvez coller le code généré. Si vous revenez en arrière une version du fichier, il va générer un fichier Excel comme ceci:



OpenXML est également une bonne alternative qui permet d'éviter l'installation de MS Excel sur le serveur. Le SDK 2.0 Open XML fourni par Microsoft simplifie la manipulation des packages Open XML et des éléments de schéma Open XML sous-jacents dans un package. L'interface API (Open XML Application Programming Interface) encapsule de nombreuses tâches courantes que les développeurs effectuent sur les packages Open XML.

Check this out OpenXML: alternative qui évite d'installer MS Excel sur le serveur


La solution commerciale, SpreadsheetGear for .NET, le fera.

Vous pouvez voir des exemples ASP.NET (C # et VB) en direct here et télécharger une version d'évaluation here .

Disclaimer: Je possède SpreadsheetGear LLC


Les diverses bibliothèques XML Office 2003 disponibles fonctionnent plutôt bien pour les fichiers Excel plus petits. Cependant, je trouve que la taille d'un grand classeur enregistré au format XML est un problème. Par exemple, un classeur avec lequel je travaillerais équivaudrait à 40 Mo dans le nouveau format XLSX (et il est vrai que le format XLSX est plus serré) devient un fichier XML de 360 ​​Mo.

En ce qui concerne mes recherches, il y a deux paquets commerciaux qui permettent la sortie vers les anciens formats de fichiers binaires. Elles sont:

Ni sont bon marché (500USD et 800USD respectivement, je pense). mais les deux fonctionnent indépendamment d'Excel lui-même.

Ce que je serais curieux de savoir est le module de sortie Excel pour les goûts d'OpenOffice.org. Je me demande s'ils peuvent être portés de Java vers .Net.


J'ai récemment utilisé FlexCel.NET et FlexCel.NET trouvé que c'était une excellente bibliothèque! Je ne dis pas cela sur trop de produits logiciels. Il est inutile de donner ici l'argumentaire de vente, vous pouvez lire toutes les fonctionnalités sur leur site Web.

C'est un produit commercial, mais vous obtenez la source complète si vous l'achetez. Donc je suppose que vous pourriez le compiler dans votre assemblée si vous le vouliez vraiment. Sinon, c'est juste un assemblage supplémentaire pour xcopy - pas de configuration ou d'installation ou quelque chose comme ça.

Je ne pense pas que vous trouveriez un moyen de le faire sans les bibliothèques tierces car le framework .NET, évidemment, n'a pas de support intégré et OLE Automation est juste un monde de douleur.




Certains fournisseurs de composants tiers tels que Infragistics ou Syncfusion fournissent de très bonnes fonctionnalités d'exportation Excel qui ne nécessitent pas l'installation de Microsoft Excel.

Étant donné que ces fournisseurs fournissent également des composants de grille d'interface utilisateur avancés, ces composants sont particulièrement utiles si vous souhaitez que le style et la présentation d'une exportation Excel imitent l'état actuel d'une grille dans l'interface utilisateur de votre application.

Si votre exportation est destinée à être exécutée côté serveur en mettant l'accent sur les données à exporter et sans lien vers l'interface utilisateur, alors je voudrais aller à l'une des options open source libres (par exemple ExcelLibrary).

J'ai déjà été impliqué dans des projets qui tentaient d'utiliser l'automatisation côté serveur sur la suite Microsoft Office. Basé sur cette expérience, je recommanderais fortement contre cette approche.


Vous pouvez utiliser OLEDB pour créer et manipuler des fichiers Excel. Cochez ceci: Lecture et écriture Excel en utilisant OLEDB .

Exemple typique:

using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\temp\\test.xls;Extended Properties='Excel 8.0;HDR=Yes'"))
{
  conn.Open();
  OleDbCommand cmd = new OleDbCommand("CREATE TABLE [Sheet1] ([Column1] string, [Column2] string)", conn);
  cmd.ExecuteNonQuery();
}

EDIT - Quelques autres liens:


Et qu'en est-il de l'utilisation de Open XML SDK 2.0 pour Microsoft Office?

Quelques avantages:

  • Ne nécessite pas Office installé
  • Fait par Microsoft = documentation MSDN décent
  • Juste un. Net dll à utiliser dans le projet
  • SDK est livré avec de nombreux outils comme diff, validateur, etc

Liens:



Bien,

vous pouvez également utiliser une bibliothèque tierce comme Aspose .

Cette bibliothèque a l'avantage de ne pas nécessiter l'installation d'Excel sur votre machine, ce qui serait idéal dans votre cas.


Quelques options que j'ai utilisées:

Si XLSX est un must: ExcelPackage est un bon début mais est mort lorsque le développeur a cessé de travailler dessus. ExML a repris à partir de là et ajouté quelques fonctionnalités. ExML n'est pas une mauvaise option, je l'utilise encore dans quelques sites de production.

Cependant, pour tous mes nouveaux projets, j'utilise NPOI , le port .NET d' Apache POI . NPOI 2.0 (Alpha) prend également en charge XLSX.


Vous pouvez jeter un oeil à http://www.gemboxsoftware.com/GBSpreadsheetFree.htm .

Ils ont une version gratuite avec toutes les fonctionnalités, mais limitée à 150 lignes par feuille et 5 feuilles par classeur, si cela répond à vos besoins.

Je n'ai pas encore eu besoin de l'utiliser, mais j'ai l'air intéressant.


Vous voudrez peut-être vérifier les classes d'interopérabilité . Vous ne dites pas OLE (ce qui n'est pas le cas), mais les classes interop sont très faciles à utiliser.

Vous pourriez être impressionné si vous ne les avez pas essayés.

S'il vous plaît soyez averti de la stance de Microsoft à ce sujet:

Microsoft ne recommande pas et ne prend actuellement pas en charge l'automatisation des applications Microsoft Office à partir d'une application ou d'un composant client non assisté et non interactif (notamment ASP, ASP.NET, DCOM et NT Services), car Office peut présenter un comportement instable et / ou blocage lorsque Office est exécuté dans cet environnement.


Si vous créez des fichiers Excel 2007/2010, essayez ce projet open source: http://closedxml.codeplex.com

Il fournit un moyen orienté objet pour manipuler les fichiers (similaire à VBA) sans traiter les tracas des documents XML. Il peut être utilisé par n'importe quel langage .NET comme C # et Visual Basic (VB).

ClosedXML vous permet de créer des fichiers Excel 2007/2010 sans l'application Excel. L'exemple typique est la création de rapports Excel sur un serveur Web:

var workbook = new XLWorkbook();
var worksheet = workbook.Worksheets.Add("Sample Sheet");
worksheet.Cell("A1").Value = "Hello World!";
workbook.SaveAs("HelloWorld.xlsx");

Je veux juste ajouter une autre référence à une solution tierce qui traite directement votre problème: http://www.officewriter.com

(Disclaimer: je travaille pour SoftArtisans, la société qui fabrique OfficeWriter)



public class GridViewExportUtil
{
    public static void Export(string fileName, GridView gv)
    {
        HttpContext.Current.Response.Clear();
        HttpContext.Current.Response.AddHeader(
            "content-disposition", string.Format("attachment; filename={0}", fileName));
        HttpContext.Current.Response.ContentType = "application/ms-excel";

        using (StringWriter sw = new StringWriter())
        {
            using (HtmlTextWriter htw = new HtmlTextWriter(sw))
            {
                //  Create a form to contain the grid
                Table table = new Table();

                //  add the header row to the table
                if (gv.HeaderRow != null)
                {
                    GridViewExportUtil.PrepareControlForExport(gv.HeaderRow);
                    table.Rows.Add(gv.HeaderRow);
                }

                //  add each of the data rows to the table
                foreach (GridViewRow row in gv.Rows)
                {
                    GridViewExportUtil.PrepareControlForExport(row);
                    table.Rows.Add(row);
                }

                //  add the footer row to the table
                if (gv.FooterRow != null)
                {
                    GridViewExportUtil.PrepareControlForExport(gv.FooterRow);
                    table.Rows.Add(gv.FooterRow);
                }

                //  render the table into the htmlwriter
                table.RenderControl(htw);

                //  render the htmlwriter into the response
                HttpContext.Current.Response.Write(sw.ToString());
                HttpContext.Current.Response.End();
            }
        }
    }

    /// <summary>
    /// Replace any of the contained controls with literals
    /// </summary>
    /// <param name="control"></param>
    private static void PrepareControlForExport(Control control)
    {
        for (int i = 0; i < control.Controls.Count; i++)
        {
            Control current = control.Controls[i];
            if (current is LinkButton)
            {
                control.Controls.Remove(current);
                control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text));
            }
            else if (current is ImageButton)
            {
                control.Controls.Remove(current);
                control.Controls.AddAt(i, new LiteralControl((current as ImageButton).AlternateText));
            }
            else if (current is HyperLink)
            {
                control.Controls.Remove(current);
                control.Controls.AddAt(i, new LiteralControl((current as HyperLink).Text));
            }
            else if (current is DropDownList)
            {
                control.Controls.Remove(current);
                control.Controls.AddAt(i, new LiteralControl((current as DropDownList).SelectedItem.Text));
            }
            else if (current is CheckBox)
            {
                control.Controls.Remove(current);
                control.Controls.AddAt(i, new LiteralControl((current as CheckBox).Checked ? "True" : "False"));
            }

            if (current.HasControls())
            {
                GridViewExportUtil.PrepareControlForExport(current);
            }
        }
    }
}

Salut cette solution est d'exporter votre vue de la grille à votre fichier Excel, il pourrait vous aider


Voici un moyen de le faire avec LINQ to XML, avec un exemple de code:

Importez et exportez rapidement des données Excel avec LINQ to XML

C'est un peu complexe, car vous devez importer des espaces de noms et ainsi de suite, mais cela vous permet d'éviter les dépendances externes.

(Aussi, bien sûr, c'est VB .NET, pas C #, mais vous pouvez toujours isoler le contenu VB .NET dans son propre projet pour utiliser XML Literals, et faire tout le reste en C #.)


Je ne crois pas que cela soit meilleur, ni même bon, simplement énoncer une autre solution.

Si les valeurs enum vont strictement de 0 à n - 1, une alternative générique:

public void EnumerateEnum<T>()
{
    int length = Enum.GetValues(typeof(T)).Length;
    for (var i = 0; i < length; i++)
    {
        var @enum = (T)(object)i;
    }
}

Si les valeurs enum sont contiguës et que vous pouvez fournir le premier et le dernier élément de l'énum, ​​alors:

public void EnumerateEnum()
{
    for (var i = Suit.Spade; i <= Suit.Diamond; i++)
    {
        var @enum = i;
    }
}

mais ce n'est pas strictement énumérant, juste en boucle. La deuxième méthode est beaucoup plus rapide que toute autre approche cependant ...





c# .net excel file-io