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

ASP.NET Discussion :

Export de SQL server vers XLS


Sujet :

ASP.NET

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 21
    Points : 7
    Points
    7
    Par défaut Export de SQL server vers XLS
    Bonjour,
    je réalise un projet pour une entreprise.
    Pour l'instant j'ai fais une page web ou l'on peut voir des graphiques.
    l'on m'a demandé de pouvoirs exporter les données de ce graphique au format CSV/XLS.
    pour le format csv pas de problème je vois comment faire.
    mais j'avoue que pour le format XLS malgré quelque rechercher (je n'ai peut être pas mis les bon mot clés) je n'ai rien trouvé pouvant m'aider.

    pour développer j'utilise asp.net avec C#.
    donc si quelqu'un sais comment je peut insérer mes données provenant de sql serveur dans un fichier xls cela m'aiderais beaucoup.

    cordialement


    Edit: j'ai une deuxième question, j'aimerais que mon fichier soit généré et envoyé directement au client. pour l'instant je crée le fichier que je stock sur le serveur puis je l'envoi au client. mais les données étant très confidentielles il serait préférable de n'avoir aucune trace de ce fichier sur notre serveur web. comment peut on écrire un flux (comme quand on lit un fichier) et l'envoyer ?

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 22
    Points : 26
    Points
    26
    Par défaut
    Bonjour Kemzy,

    Pour générer ton fichier xls tu peux essayer de te renseigner sur l'automation Excel.

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 21
    Points : 7
    Points
    7
    Par défaut
    merci pour ta réponse. c'est un peut compliqué je trouve.
    pour l'instant j'ai utilisé la méthode suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Response.ContentEncoding = System.Text.Encoding.Default;
    Response.ContentType = "application/vnd.ms-excel";
    Response.Write(Temp);
    enfaite je revois sur une page ou Temp contiens un tableau.

    cependant je ne suis pas super satisfait. j'aurais bien aimé réussir a envoyer un fichier csv en le générant en directe à partir d'une requête et sans qu'il reste stocké sur le serveur

  4. #4
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 512
    Points
    9 512
    Par défaut
    Salut,
    Citation Envoyé par Kemzy Voir le message
    Edit: j'ai une deuxième question, j'aimerais que mon fichier soit généré et envoyé directement au client. pour l'instant je crée le fichier que je stock sur le serveur puis je l'envoi au client. mais les données étant très confidentielles il serait préférable de n'avoir aucune trace de ce fichier sur notre serveur web. comment peut on écrire un flux (comme quand on lit un fichier) et l'envoyer ?
    Il faut effectivement créer un flux. Comment créés-tu ton fichier en mémoire (avant d'en faire un fichier sur le disque).
    Pourquoi ne pas simplement supprimer le fichier?

    Sinon, voilà un peu de code pour créer un fichier excel:
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    public static string ToXLS(DataSet data)
    {
    	StringBuilder xml = new StringBuilder();
    	xml.Append(HeaderToXLS());
    	foreach (DataTable dt in data.Tables)
    	{
    		xml.Append(RowToXLS(dt));
    	}
    	xml.Append("</Workbook>");
    	return xml.ToString();
    }
     
     
    private static string HeaderToXLS()
    {
    	StringBuilder xml = new StringBuilder();
    	xml.Append("<?xml version=\"1.0\"?>\n");
    	xml.Append("<?mso-application progid=\"Excel.Sheet\"?>\n");
    	xml.Append("<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\" ");
    	xml.Append("xmlns:o=\"urn:schemas-microsoft-com:office:office\" ");
    	xml.Append("xmlns:x=\"urn:schemas-microsoft-com:office:excel\" ");
    	xml.Append("xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\" ");
    	xml.Append("xmlns:html=\"http://www.w3.org/TR/REC-html40\">\n");
    	xml.Append("<DocumentProperties xmlns=\"urn:schemas-microsoft-com:office:office\">");
    	xml.Append("</DocumentProperties>");
    	xml.Append("<ExcelWorkbook xmlns=\"urn:schemas-microsoft-com:office:excel\">\n");
    	xml.Append("<ProtectStructure>False</ProtectStructure>\n");
    	xml.Append("<ProtectWindows>False</ProtectWindows>\n");
    	xml.Append("</ExcelWorkbook>\n");
     
    	return xml.ToString();
    }
     
    private static string RowToXLS(DataTable dt)
    {
    	StringBuilder xml = new StringBuilder();
     
    	xml.AppendFormat(" <Worksheet ss:Name=\"{0}\">\n", dt.TableName);
     
    	xml.AppendFormat("  <Table ss:ExpandedColumnCount=\"{0}\" ss:ExpandedRowCount=\"{1}\" x:FullColumns=\"1\"", dt.Columns.Count, dt.Rows.Count + 1);
    	xml.Append("   x:FullRows=\"1\">\n");
     
     
    	xml.Append("<Row>\n");
    	foreach (DataColumn column in dt.Columns)
    	{
     
    		xml.Append("<Cell><Data ss:Type=\"String\">\n");
    		xml.Append(System.Web.HttpUtility.HtmlEncode(column.ColumnName));
    		xml.Append("</Data></Cell>\n");
     
    	}
    	xml.Append("</Row>\n");
     
     
     
    	foreach (DataRow row in dt.Rows)
    	{
     
    		xml.Append("<Row>\n");
    		for (int i = 0; i < dt.Columns.Count; i++)
    		{
    			if (row[i].GetType() == typeof(decimal))
    				xml.Append("<Cell><Data ss:Type=\"Number\">");
    			else
    				xml.Append("<Cell><Data ss:Type=\"String\">");
     
    			xml.Append(System.Web.HttpUtility.HtmlEncode(Convert.ToString(row[i])));
    			xml.Append("</Data></Cell>\n");
    		}
    		xml.Append("</Row>\n");
    	}
     
    	xml.Append("  </Table>\n");
    	xml.Append("  <WorksheetOptions xmlns=\"urn:schemas-microsoft-com:office:excel\">\n");
    	xml.Append("   <Selected/>\n");
    	xml.Append("   <Panes>\n");
    	xml.Append("    <Pane>\n");
    	xml.Append("     <Number>3</Number>\n");
    	xml.Append("     <ActiveRow>1</ActiveRow>\n");
    	xml.Append("    </Pane>\n");
    	xml.Append("   </Panes>\n");
    	xml.Append("<ProtectObjects>False</ProtectObjects>\n");
    	xml.Append("<ProtectScenarios>False</ProtectScenarios>\n");
    	xml.Append("  </WorksheetOptions>\n");
    	xml.Append(" </Worksheet>\n");
    	return xml.ToString();
    }
    A+

  5. #5
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 21
    Points : 7
    Points
    7
    Par défaut
    merci pour le bout de code.
    et bien quand je crée un fichier je fait directement
    StreamWriter variable = new streamwriter("chemin", true/false);
    ce qui me crée un fichier. moi j'aurais aimé créer un flux mais directement mettre le fichier chez le client.

    J'avais pensé à la deuxième solution que tu a fourni (le supprimer dès la fin du téléchargement). mais je ne sais pas comment faire pour voir si le client a fini de télécharger ou pas :s

  6. #6
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 512
    Points
    9 512
    Par défaut
    Citation Envoyé par Kemzy Voir le message
    StreamWriter variable = new streamwriter("chemin", true/false);
    Il faut utiliser un MemoryStream et l'envoyer avec Response.BinayWrite
    Tu peux aussi regarder ce code:
    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
    public static void DownloadZipFile(System.Web.UI.Page webPage, FileInfo filePath)
    {
    	if (filePath.Exists)
    	{
    		byte[] buffer = new byte[4096];
     
    		webPage.Response.AddHeader("content-disposition", string.Format(CultureInfo.InvariantCulture, "attachment; filename={0}.zip", Path.GetFileNameWithoutExtension(filePath.FullName)));
     
    		using (ZipOutputStream zos = new ZipOutputStream(webPage.Response.OutputStream))
    		{
    			zos.SetLevel(9);
    			ZipEntry zentry = new ZipEntry(filePath.Name);
    			zos.PutNextEntry(zentry);
    			using (FileStream fs = filePath.OpenRead())
    			{
    				StreamUtils.Copy(fs, zos, buffer);
    			}
    			zos.Finish();
    			zos.Close();
    		}
    		webPage.Response.End();
    	}
    }
    Le "ZipOutPutStream" est une classe de la bibliothèque "ICSharpCode.SharpZipLib".

    Pour ce qui es d'effacer le fichier, cela ne devrait pas poser de problème. Le tant que le flux est en cours d'utilisation tu ne passera pas à l'instruction de suppression.

    A+

Discussions similaires

  1. Exporter une base SQL server vers une base Mysql
    Par Angelik dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 16/12/2014, 00h44
  2. Export des nvarchar de sql server vers Access
    Par matlatomat dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 25/08/2010, 18h47
  3. Réponses: 7
    Dernier message: 05/05/2010, 18h48
  4. Export de onnées depuis sql server vers mysql
    Par elspliffo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 13/07/2006, 00h11
  5. Script sql pour exporter BD de sql server vers access
    Par kayser dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/12/2004, 15h48

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