1 votes

L'exportation vers Word avec un nom de fichier ne semble pas fonctionner

J'exporte une table de données vers Word, lorsque je passe un nom de fichier, il ne semble pas obtenir le nom de fichier dans la boîte de dialogue Ouvrir/Enregistrer.

Voici ce que je fais

public static void Convertword(DataTable dt, HttpResponse Response,string filename)
{
    try
    {
        Response.Clear();
        Response.AddHeader("content-disposition", "attachment;filename=" + filename + ".doc");
        Response.Charset = "";
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.ContentType = "application/vnd.word";
        System.IO.StringWriter stringWrite = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter htmlWrite = new System.Web.UI.HtmlTextWriter(stringWrite);
        System.Web.UI.WebControls.GridView dg = new System.Web.UI.WebControls.GridView();
        dg.DataSource = dt;
        dg.DataBind();
        dg.RenderControl(htmlWrite);
        Response.Write(stringWrite.ToString());
        Response.End();
    }
    catch(Exception err)
    {
        throw err;
    }
}

Quand je passe le nom du fichier "report(" + System.DateTime.Now.ToString("dd/MM/yyyy"); + ")" il ne prend pas la valeur comme dd/MM/YYYY au lieu de cela, il affiche le nom du fichier comme dd_MM_YYYY

3voto

Darin Dimitrov Points 528142

Quelques remarques sur votre code :

  1. Vous définissez l'en-tête du type de contenu comme un document Word, mais vous envoyez en fait du contenu HTML en rendant un GridView.
  2. dd/MM/YYYY n'est pas un nom de fichier valide en raison de l'utilisation de l'attribut / caractère.
  3. Vous n'avez pas besoin d'un try/catch si dans le catch vous ne faites que throw err
  4. Appel à Response.End à la fin n'est pas nécessaire.
  5. Utilisez toujours using lorsqu'il s'agit d'objets jetables tels que des flux et des lecteurs/écrivains, afin de s'assurer que l'instruction Dispose est invoquée dans tous les cas.

2voto

Rubens Farias Points 33357

Vous devez utiliser un nom de fichier comme

String.Format("report{0:ddMMyyyy}.doc", DateTime.Now);

0voto

Pedro Points 3713

Un nom de fichier ne peut pas contenir "/".

0voto

0xA3 Points 73439

C'est probablement parce que / n'est pas un caractère valide pour les noms de fichiers. Votre nom doit remplir certains critères, veillez à ne pas utiliser l'un des éléments suivants

* . " / \ [ ] : ; | = ,

0voto

Mark Redman Points 10816

Si le nom du fichier contient des barres obliques, je suppose que l'URL du fichier est cassée et que les barres obliques sont remplacées à un moment donné.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X