Esporta in parola con un nome di file non sembra funzionare
-
21-09-2019 - |
Domanda
I esportare un DataTable per parola, quando passo davanti a un nome di file non sembra per ottenere il nome del file in Open / Save finestra di dialogo.
Ecco quello che sto facendo
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;
}
}
Quando passo il nome del file "report(" + System.DateTime.Now.ToString("dd/MM/yyyy");
+ ")"
non ci vuole il valore come dd / MM / AAAA invece mostra il nome del file come dd_MM_YYYY
Soluzione
alcune osservazioni circa il vostro codice:
- Si imposta il tipo di contenuto intestazione a un documento di parola, ma in realtà si sta inviando contenuti HTML per il rendering di una GridView
-
dd/MM/YYYY
non è un nome di file valido a causa del carattere/
. - Non è necessario un blocco
try/catch
se nella dichiarazionecatch
si sta solo facendothrow err
- Chiamata
Response.End
alla fine non è necessario. - Usare sempre comunicato
using
quando si tratta di oggetti usa e getta, come ruscelli e lettori / scrittori per garantire che il metodoDispose
viene richiamato in tutti i casi.
Altri suggerimenti
Si dovrebbe usare un nome di file come
String.Format("report{0:ddMMyyyy}.doc", DateTime.Now);
Un nome di file non può avere "/".
Questo è molto probabilmente perché /
non è un carattere valido per i nomi dei file. Il suo nome deve soddisfare determinati criteri, essere sicuri di non utilizzare uno dei
* . " / \ [ ] : ; | = ,
Se avete slash nel nome del file, presumo che questo avrebbe rotto l'URL del file e quindi le barre vengono sostituiti ad un certo punto?