لا يبدو أن التصدير إلى Word باسم ملف يعمل
-
21-09-2019 - |
سؤال
أقوم بتصدير 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
المحلول
القليل من الملاحظات حول الكود الخاص بك:
- أنت تقوم بتعيين رأس نوع المحتوى على مستند Word ولكنك تقوم بالفعل بإرسال محتويات HTML عن طريق تقديم GridView
dd/MM/YYYY
ليس اسم ملف صالح بسبب/
حرف.- أنت لا تحتاج
try/catch
حظر إذا فيcatch
بيان أنك تفعل فقطthrow err
- الدعوة
Response.End
في النهاية ليس ضروريًا. - دائما يستخدم
using
بيان عند التعامل مع الكائنات التي يمكن التخلص منها مثل التدفقات والقراء/الكتاب لضمان أنDispose
يتم استدعاء الطريقة في جميع الحالات.
نصائح أخرى
يجب عليك استخدام اسم ملف مثل
String.Format("report{0:ddMMyyyy}.doc", DateTime.Now);
اسم الملف لا يمكن أن يكون "/".
هذا على الأرجح بسبب /
ليس حرفًا صالحًا لأسماء الملفات. يجب أن يستوفي اسمك معايير معينة ، تأكد من عدم استخدام أي من
* . " / \ [ ] : ; | = ,
إذا كان لديك مائل إلى الأمام في اسم الملف ، فأفترض أن هذا من شأنه أن يحطم عنوان URL إلى الملف وبالتالي يتم استبدال القطع المائلة في مرحلة ما؟
لا تنتمي إلى StackOverflow