IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 .NET Discussion :

Export excel avec macro


Sujet :

.NET

  1. #1
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 391
    Par défaut Export excel avec macro
    Bonjour à tous ,

    j'ai une fonction d'export Excel que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    protected void exportToExcel(GridView gv, string fileName)
            {
                //Create a response stream to create and write the Excel file
                HttpContext curContext = HttpContext.Current;
                curContext.Response.Clear();
                curContext.Response.AddHeader("content-disposition", "attachment;filename=" + fileName);
                curContext.Response.Charset = "";
                curContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
                curContext.Response.ContentType = "application/vnd.ms-excel";
     
                //Convert the rendering of the gridview to a string representation 
                StringWriter sw = new StringWriter();
                HtmlTextWriter htw = new HtmlTextWriter(sw);
                gv.RenderControl(htw);
     
                //Open a memory stream that you can use to write back to the response
                byte[] byteArray = Encoding.ASCII.GetBytes(sw.ToString());
                MemoryStream s = new MemoryStream(byteArray);
                StreamReader sr = new StreamReader(s, Encoding.ASCII);
     
                //Write the stream back to the response
                curContext.Response.Write(sr.ReadToEnd());
                curContext.Response.End();
            }
    Que j'ai récupéré dans un logiciel fait par un ancien stagiaire de l'entreprise dans laquelle je bosse. J'aimerais savoir si avec cette méthode d'export, on peut faire en sorte d'ajouter des macros au document excel qui est généré ?

    Merci d'avance

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Apparemment ça exporte en HTML, que Excel comprend un peu. Mais ce format ne supporte pas les macros bien sûr...

    Soit dit en passant, ce code fait des trucs assez débiles... ça convertit le texte HTML en binaire avec l'encodage ASCII (donc en perdant au passage tous les caractères qui ne font pas partie du jeu de caractères ASCII), juste pour le retransformer aussitôt en String... bilan des courses : rien n'a changé, sauf que toutes les lettres accentuées ont sauté

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 391
    Par défaut
    LoL, merci pour votre réponse. J'ai bêtement copier/coller, j'ai pas encore chercher vraiment à comprendre ^^ je vais regarder ça.

    Sinon vous ne connaissez pas un autre moyen d'exporter vers Excel et en insérant des macros ?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par paladice Voir le message
    Sinon vous ne connaissez pas un autre moyen d'exporter vers Excel et en insérant des macros ?
    Il y a plein de moyens d'exporter vers Excel, mais en insérant des macros je sais pas... a priori l'option qui a le plus de chances de marcher est l'interop avec Office.
    Jette un coup d'oeil ici, il y a des tutos qui pourraient t'intéresser :
    http://dotnet.developpez.com/cours/?...sharp#officecs

  5. #5
    Membre éclairé

    Profil pro
    Chef de Projet / Développeur
    Inscrit en
    Juin 2002
    Messages
    621
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de Projet / Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2002
    Messages : 621
    Par défaut
    Bonjour,

    Pour la production de fichier Excel, j'utilise personnellement EPPlus.
    http://epplus.codeplex.com/

    C'est juste une DLL et un fichier XML à mettre dans le dossier Bin de l'application ASP.Net

    C'est très léger, la prise en main est quasi immédiate et n'oblige pas à avoir Office sur la machine qui produit le fichier.

    On fait du code du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ExcelPackage pck = new ExcelPackage(new FileInfo(fileName));
    ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Onglet 1");
    wsInfo.Cells[1, 1].Value = "Questionnaire";
    wsInfo.Cells[2, 2].Value = Questionnaire.Libelle;
    wsInfo.Cells[2, 2].Style.Font.Bold = true;
    wsInfo.Cells[2, 2].Style.Font.Size = 20;
    wsInfo.Cells["A4"].Value = "Date extraction :";
    wsInfo.Cells["B4"].Value = DateTime.Now.ToString("dd/MM/yyy hh:mm");
    pck.Save();
    Je n'ai jamais essayé d'insérer une macro, mais la page d’accueil du projet parle bien du support de VBA et Intellisense me propose bien ws.CodeModule.Code et il est possible de saisir des chose comme, ce sample piqué sur le web :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    // Auteur : JanKallman - http://www.codeplex.com/site/users/view/JanKallman
     
    DirectoryInfo workingDir = new DirectoryInfo(@"C:\epplusExample\folder");
            if (!workingDir.Exists)
                workingDir.Create();
            FileInfo f = new FileInfo(workingDir.FullName + "//" + "temp.xlsx");
            if (f.Exists)
                f.Delete();
     
            ExcelPackage myPackage = new ExcelPackage(f);
            myPackage.Workbook.CreateVBAProject();
            ExcelWorksheet excelWorksheet = myPackage.Workbook.Worksheets.Add("Sheet1");
            ExcelWorksheet excelWorksheet2 = myPackage.Workbook.Worksheets.Add("Sheet2");
            ExcelWorksheet excelWorksheet3 = myPackage.Workbook.Worksheets.Add("Sheet3");
            FileInfo f2 = new FileInfo(workingDir.FullName + "//" + "newfile.xlsm");
            ExcelVBAModule excelVbaModule = myPackage.Workbook.VbaProject.Modules.AddModule("Module1");
            StringBuilder mybuilder = new StringBuilder();
            mybuilder.AppendLine("Sub Jiminy()");
            mybuilder.AppendLine("\tRange(\"D6\").Select");
            mybuilder.AppendLine("\tActiveCell.FormulaR1C1 = \"Jiminy\"");
            mybuilder.AppendLine("End Sub");
            excelVbaModule.Code = mybuilder.ToString();
            myPackage.SaveAs(f2);
            myPackage.Dispose();
    Ca semble donc pouvoir faire ton bonheur.
    Cherche "EPPlus" sur developper.com, il y a pas mal de référence dans les forums et un article de Philippe Vialatte.

    Cordialement

  6. #6
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 391
    Par défaut
    Merci à vous pour vos réponses très détaillées =D !

    Je vais regarder ça de suite

Discussions similaires

  1. Export Excel avec format sans Excel
    Par Seb.26 dans le forum Windows Forms
    Réponses: 11
    Dernier message: 07/02/2007, 12h18
  2. Insérer une feuille Excel avec macro dans une page HTML
    Par Pakkaï dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 08/12/2006, 17h40
  3. Export excel avec JRCsvExporter !
    Par eric95 dans le forum JSF
    Réponses: 9
    Dernier message: 30/11/2006, 18h16
  4. Ouverture de fichier Excel avec macros
    Par Mathusalem dans le forum MATLAB
    Réponses: 2
    Dernier message: 15/06/2006, 11h39
  5. probleme de selection aleatoire sur excel avec macro vba
    Par guillaume sors dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/10/2005, 10h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo