سؤال

أقوم بتصدير DataTable إلى Word ، عندما أقوم بتمرير اسم ملف ، لا يبدو أنه يحصل على اسم الملف في مربع حوار Open/Save.

هذا ما أفعله

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"); + ")" لا يستغرق الأمر القيمة DD/mm/yyyy بدلاً من ذلك ، يُظهر اسم الملف كـ 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