Экспорт в word с именем файла, похоже, не работает

StackOverflow https://stackoverflow.com/questions/1973843

Вопрос

Я экспортирую datatable в Word, но когда я передаю имя файла, кажется, что он не получает имя файла в диалоговом окне "Открыть / сохранить".

Вот что я делаю

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;
    }
}

Когда я передаю имя файла "report(" + System.DateTime.Now.ToString("dd/MM/yyyy"); + ")" он не принимает значение как дд/ММ/ГГГГ вместо этого он показывает имя файла как ДД_ММ_ЫЫЫЫЫ

Это было полезно?

Решение

Несколько замечаний о вашем коде:

  1. Вы устанавливаете заголовок типа содержимого для документа word, но на самом деле отправляете содержимое HTML путем отображения GridView
  2. dd/MM/YYYY не является допустимым именем файла из-за / характер.
  3. Тебе не нужен try/catch блокировать, если в catch утверждение, которое вы только делаете throw err
  4. Зовущий Response.End в конце этого делать не обязательно.
  5. Всегда используйте using заявление при работе с одноразовыми объектами, такими как потоки и устройства чтения / записи, для обеспечения того, чтобы Dispose метод вызывается во всех случаях.

Другие советы

Вы должны использовать имя файла, подобное

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

Имя файла не может содержать "/".

Это, скорее всего, потому, что / недопустимый символ для имен файлов.Ваше имя должно соответствовать определенным критериям, убедитесь, что не используете ни один из

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

Если у вас есть косые черты в имени файла, я бы предположил, что это приведет к разрыву URL-адреса файла, и, следовательно, косые черты в какой-то момент заменяются?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top