Exportar para a palavra com um nome de arquivo não parece funcionar
-
21-09-2019 - |
Pergunta
Exporto um datatable para o Word, quando passo um nome de arquivo, ele não parece obter o nome do arquivo na caixa de diálogo Open/Salvar.
Aqui está o que estou fazendo
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 eu passo o nome do arquivo "report(" + System.DateTime.Now.ToString("dd/MM/yyyy");
+ ")"
não leva o valor como dd/mm/AAA Em vez disso, mostra o nome do arquivo como dd_mm_yyyy
Solução
Poucas observações sobre seu código:
- Você está definindo o cabeçalho do tipo de conteúdo para um documento do Word, mas está realmente enviando conteúdo HTML, renderizando uma Gridview
dd/MM/YYYY
não é um nome de arquivo válido por causa do/
personagem.- Você não precisa de um
try/catch
Bloco se nocatch
declaração que você está apenas fazendothrow err
- Chamando
Response.End
No final, não é necessário. - Sempre use
using
declaração ao lidar com objetos descartáveis, como fluxos e leitores/escritores para garantir que oDispose
O método é chamado em todos os casos.
Outras dicas
Você deve usar um nome de arquivo como
String.Format("report{0:ddMMyyyy}.doc", DateTime.Now);
Um nome de arquivo não pode ter "/".
Isso é mais provável porque /
não é um caractere válido para nomes de arquivos. Seu nome deve cumprir certos critérios, certifique -se de não usar nenhum dos
* . " / \ [ ] : ; | = ,
Se você tiver barras para a frente no nome do arquivo, eu presumiria que isso quebraria o URL no arquivo e, portanto, as barras estão sendo substituídas em algum momento?