问题:用asp.net的GridView控件导出excel时,在excel2003中没有问题,但用excel2007中访问会出现提示对话框。
目的:当用asp.net的GridView控件导出excel时,如果客户段用excel2007打开不弹出对话框,并且保留GridView的样式效果。曾经使用用过的方法:(注:因为项目的原因下列方法都不能使用,主要是不能修改客户端的任何设置)
1.修改客户端的注册表键值。(修改excel2007的warning 级别)
2.修改客户端ie的设置。(用vb的脚本实现到处)
3.用cvs或txt等格式打开。(缺点不能保存GridView的样式)
4.用xml文件格式到处。(当客户端本地的xml默认打开方式不是excel时,将会出现问题)各位大侠能否给小弟提供一个新的解决方法吗?万分感谢
目的:当用asp.net的GridView控件导出excel时,如果客户段用excel2007打开不弹出对话框,并且保留GridView的样式效果。曾经使用用过的方法:(注:因为项目的原因下列方法都不能使用,主要是不能修改客户端的任何设置)
1.修改客户端的注册表键值。(修改excel2007的warning 级别)
2.修改客户端ie的设置。(用vb的脚本实现到处)
3.用cvs或txt等格式打开。(缺点不能保存GridView的样式)
4.用xml文件格式到处。(当客户端本地的xml默认打开方式不是excel时,将会出现问题)各位大侠能否给小弟提供一个新的解决方法吗?万分感谢
或参考
System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter); DataTable dt = new DataTable();
dt = CreateDataTable();
GridView1.DataSource = dt;
GridView1.DataBind(); GridView1.RenderControl(oHtmlTextWriter);
string fileName = HttpUtility.UrlEncode("aaa.xls", Encoding.GetEncoding("utf-8"));
StreamWriter wter = File.CreateText(Server.MapPath("..") + "\\temp" + "\\" + fileName);
wter.Write(oStringWriter.ToString());
wter.Close();
oStringWriter.Close(); FileStream MyFileStream;
long FileSize; MyFileStream = new FileStream(Server.MapPath("..") + "\\temp" + "\\" + fileName, FileMode.Open);
FileSize = MyFileStream.Length; byte[] Buffer = new byte[(int)FileSize];
MyFileStream.Read(Buffer, 0, (int)FileSize);
MyFileStream.Close();
FileInfo fileInfo = new FileInfo(Server.MapPath("..") + "\\temp" + "\\" + fileName);
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.Write("<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />"); Response.AddHeader("Content-Disposition", "attachment;filename=" +fileName);
// Response.AddHeader("Content-Length", (fileInfo.Length + 68).ToString()); // Response.AddHeader("Content-Transfer-Encoding", "binary");
// Response.ContentType = "application/octet-stream";
Response.ContentEncoding = System.Text.Encoding.UTF8; // Response.WriteFile(fileInfo.FullName);
Response.BinaryWrite(Buffer);
// Response.WriteFile(Server.MapPath("..") + "\\temp" + "\\" + fileName);
Response.Flush();
if (System.IO.File.Exists(Server.MapPath("..") + "\\temp" + "\\" + fileName))
System.IO.File.Delete(Server.MapPath("..") + "\\temp" + "\\" + fileName);
Response.End();