GridView导出生成Excel文件的问题,office2007/2010打不开 ????

问题描述

导出代码HttpContext.Current.Response.AppendHeader("Content-Disposition","attachment;filename=a.xls");HttpContext.Current.Response.Charset="UTF-8";HttpContext.Current.Response.ContentEncoding=System.Text.Encoding.UTF7;HttpContext.Current.Response.ContentType="application/ms-excel";GridView1.EnableViewState=false;System.IO.StringWritertw=newSystem.IO.StringWriter();System.Web.UI.HtmlTextWriterhw=newSystem.Web.UI.HtmlTextWriter(tw);GridView1.RenderControl(hw);HttpContext.Current.Response.Write(tw.ToString());HttpContext.Current.Response.End();

用excel2003时候一切正常用excel2007/2010打开则提示"您尝试打开的文件xxx.xls的格式与文件扩展名指定的格式不一致。打开文件前请验证文件没有损坏且来源可信。是否立即打开该文件?"选“是”后提示“单元格数据太大”确认后打开的Excel文件是类似乱码的一长串字符串代码如“+ADw-tableid+AD0AIg-tb1+ACI-style+AD0AIg-width:800px....”

解决方案

解决方案二:
试试这个,在某个项目中用过privatevoidCreateExcel(DataTabledt,stringfileName){HttpResponseresp;resp=Page.Response;resp.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");resp.AppendHeader("Content-Disposition","attachment;filename="+fileName);stringcolHeaders="",ls_item="";////定义表对象与行对象,同时用DataSet对其值进行初始化//DataTabledt=ds.Tables[0];DataRow[]myRow=dt.Select();//可以类似dt.Select("id>10")之形式达到数据筛选目的inti=0;intcl=dt.Columns.Count;//取得数据表各列标题,各标题之间以t分割,最后一个列标题后加回车符for(i=0;i<cl;i++){if(i==(cl-1))//最后一列,加n{colHeaders+=dt.Columns[i].Caption.ToString()+"n";}else{colHeaders+=dt.Columns[i].Caption.ToString()+"t";}}resp.Write(colHeaders);//向HTTP输出流中写入取得的数据信息//逐行处理数据foreach(DataRowrowinmyRow){//当前行数据写入HTTP输出流,并且置空ls_item以便下行数据for(i=0;i<cl;i++){if(i==(cl-1))//最后一列,加n{ls_item+=row[i].ToString()+"n";}else{ls_item+=row[i].ToString()+"t";}}resp.Write(ls_item);ls_item="";}resp.End();}

解决方案三:
Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");Response.ContentType="application/vnd.xls";System.IO.StringWriteroStringWriter=newSystem.IO.StringWriter();打开excel模板赋值
解决方案四:
这个群27102713有一个现成的代码,只需要定义参数传入DataTable就可以生成xml很简单
解决方案五:
publicvoidCreateExcel(DataSetds,stringtypeid,stringFileName){HttpResponseresp;resp=Page.Response;resp.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");resp.AppendHeader("Content-Disposition","attachment;filename="+FileName);stringcolHeaders="",ls_item="";inti=0;//定义表对象与行对像,同时用DataSet对其值进行初始化DataTabledt=ds.Tables[0];DataRow[]myRow=dt.Select("");//typeid=="1"时导出为Excel格式文件;typeid=="2"时导出为XML格式文件if(typeid=="1"){//取得数据表各列标题,各标题之间以t分割,最后一个列标题后加回车符for(i=0;i<dt.Columns.Count-1;i++){colHeaders+=dt.Columns[i].Caption.ToString()+"t";//colHeaders+=dt.Columns[i].Caption.ToString()+"n";}colHeaders+=dt.Columns[i].Caption.ToString()+"n";//向HTTP输出流中写入取得的数据信息resp.Write(colHeaders);//逐行处理数据foreach(DataRowrowinmyRow){//在当前行中,逐列获得数据,数据之间以t分割,结束时加回车符nfor(i=0;i<dt.Columns.Count-1;i++){ls_item+=row[i].ToString()+"t";//ls_item+=row[i].ToString()+"n";}ls_item+=row[i].ToString()+"n";//当前行数据写入HTTP输出流,并且置空ls_item以便下行数据resp.Write(ls_item);ls_item="";}}else{if(typeid=="2"){//从DataSet中直接导出XML数据并且写到HTTP输出流中resp.Write(ds.GetXml());}}//写缓冲区中的数据到HTTP头文件中resp.End();}

解决方案六:
用office2003跟2007和2010的HttpContext.Current.Response.ContentType="application/ms-excel";这段代码不一样的吧~
解决方案七:
哪天你去一个公司面试不让用GW,不让用dataset,咋搞?
解决方案八:
我也遇到了同样的问题,期待大大来解决!!!!!!!!
解决方案九:
我给顶顶,我导出到excel的代码很简单,但是个人认为还是比较不错,就是用office2007打不开,郁闷protectedvoidButton8_Click(objectsender,EventArgse)//导出excel按钮{//Export("application/ms-excel","供暖asp.xls");stringstyle="<style>td{mso-number-format:"\@";}</style>";//防止导出excel时将以0开头的全数字数据的0去掉GridViewgridview=newGridView();gridview.DataSource=dst;gridview.DataBind();//绑定当前数据源Response.Clear();Response.Buffer=true;Response.Charset="GB2312";Response.AddHeader("content-disposition","attachment;filename=focusfires.xls");Response.ContentType="application/ms-excel";Response.ContentEncoding=System.Text.Encoding.UTF7;//Response.AppendHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode(FileName,Encoding.UTF8).ToString());//Response.ContentType=FileType;this.EnableViewState=false;//StringWritertw=newStringWriter();//HtmlTextWriterhw=newHtmlTextWriter(tw);//GridView1.RenderControl(hw);System.IO.StringWriteroStringWriter=newSystem.IO.StringWriter();System.Web.UI.HtmlTextWriteroHtmlTextWriter=newSystem.Web.UI.HtmlTextWriter(oStringWriter);gridview.RenderControl(oHtmlTextWriter);Response.Write(style);Response.Write(oStringWriter.ToString());Response.End();}

解决方案十:
我最近也搞过一个导出,用2007打开时也会报,不过还是可以打开的,也没乱码。///<summary>///导出记录///</summary>///<paramname="sender"></param>///<paramname="e"></param>protectedvoidButton1_Click(objectsender,EventArgse){stringsql="selectc.UserIDas'用户名',a.UserNameas'姓名',b.SchoolNameas'学校',b.ZhuanYeas'专业',c.Sdateas'访问日期',c.CallPageas'页面地址',a.Emailas'用户邮箱',a.Telephoneas'用户联系号码'fromXTGL_UserVisitDetailsascleftjoinXTGL_UserInfoasaonc.UserID=a.UserIDleftjoinStudent_Infoasbonc.UserID=b.UserIDwhere1=1"+OutSql;OutSql="";DataTabledt=DataAccess.GetDataTable(sql);stringpath=PubMethod.GetPath("70");try{ExportExcelStream(dt,HttpUtility.HtmlDecode(path+"用户访问明细.xls"));PubMethod.DownloadFile(Page,"用户访问明细",path+"用户访问明细.xls",".xls");}catch(Exception){PubMethod.ShowMessage(Page,"数据导出出错");}}///<summary>///保存DataTable数据到filepath文件中///</summary>///<paramname="table">数据源</param>///<paramname="filepath">文件</param>publicvoidExportExcelStream(DataTabletable,stringfilepath){StringWriterstringWriter=newStringWriter();HtmlTextWriterhtmlWriter=newHtmlTextWriter(stringWriter);System.Web.UI.WebControls.DataGridexcel=newSystem.Web.UI.WebControls.DataGrid();excel.DataSource=table.DefaultView;//输出DataTable的内容excel.DataBind();excel.RenderControl(htmlWriter);stringfilestr=filepath;intpos=filestr.LastIndexOf("\");stringfile=filestr.Substring(0,pos);if(!Directory.Exists(file)){Directory.CreateDirectory(file);}System.IO.StreamWritersw=newStreamWriter(filestr);try{sw.Write(stringWriter.ToString());}catch(Exception){PubMethod.ShowMessage(Page,"数据导出出错");}sw.Close();}

写的比较麻烦,因为需求问题。
解决方案十一:
stringstyle=@"<style>.text{mso-number-format:@}</script>";//导入到excel时,保存表里数字列中前面存在的0.Response.Clear();Response.Charset="GB2312";Response.ContentEncoding=Encoding.UTF8;Response.AppendHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode(FileName,Encoding.UTF8).ToString());Response.ContentType=FileType;this.EnableViewState=false;this.GridView1.AllowPaging=false;System.Globalization.CultureInfomyCItrad=newSystem.Globalization.CultureInfo("ZH-CN",true);StringWritersw=newStringWriter();HtmlTextWriterhtw=newHtmlTextWriter(sw);this.GridView1.RenderControl(htw);Response.Write(style);Response.Write(sw.ToString());//Response.Write(dt.ToString());Response.End();请高手检查下我的代码,用2007打开后,汉字为乱码,求解
解决方案十二:
Response.Charset="UTF-8";Response.ContentEncoding=Encoding.UTF8;这个一定要对应,否则有时候就是乱码!
解决方案十三:
Response.Charset="UTF-8";Response.ContentEncoding=Encoding.UTF8;
解决方案十四:
Response.Charset="GB2312";Response.ContentEncoding=System.Text.Encoding.UTF8;Response.Write("<metahttp-equiv=Content-Typecontent=text/html;charset=UTF-8>");加上红颜色的这句话就好了
解决方案十五:
其实很简单,我刚遇到了这个问题:把HttpContext.Current.Response.ContentEncoding=System.Text.Encoding.UTF7;

改为:Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");

即可
解决方案:
Spire.Office2.1.1絕對好使
解决方案:
下面这个Insus.NET已在无数据的专案中使用,暂时还没有发现用户说导出的Excel打不开或乱码等情况:
解决方案:
引用14楼的回复:

其实很简单,我刚遇到了这个问题:把C#codeHttpContext.Current.Response.ContentEncoding=System.Text.Encoding.UTF7;改为:C#codeResponse.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");即可

顶,其实就是编码的问题

时间: 2024-08-04 02:20:41

GridView导出生成Excel文件的问题,office2007/2010打不开 ????的相关文章

ASP.NET2.0中将GridView导出到Excel文件中

下面代码实现将 GridView 导出到 Excel文件中. 值得注意的是VerifyRenderingInServerForm重载方法: MSDN上的 VerifyRenderingInServerForm 方法的描述: 必须位于 <form runat=server> 标记中的控件可以在呈现之前调用此方法,以便在控件被置于标记外时显示错误信息.发送回或依赖于注册的脚本块的控件应该在 Control.Render 方法的重写中调用此方法.呈现服务器窗体元素的方式不同的页可以重写此方法以在不同

有谁做个gridview 导出到Excel文件.

问题描述 有谁做个gridview导出到Excel文件.必须导出到officeexcel2007中,请大侠们给个例子参考参考!谢谢! 解决方案 解决方案二:usingSystem.IO;usingSystem.Text;//页面增加一个按钮,单击事件添加如下方法:protectedvoidButton1_Click(objectsender,EventArgse){Export("application/ms-excel","学生成绩报表.xls");}privat

如何将datagridview显示内容导出为excel文件?在另外的机器上使用时有什么注意事项?

问题描述 将dataGridview中显示的数据导出生成EXCEL文件,已经编译成功,但是放到别的机器上使用的时候又不行,提示版本不对,有什么解决方法吗?运行的机器上已经装有excel.源程序如下:///<summary>///zjjzdq.com.cn///</summary>///<paramname="dt"></param>protectedvoidExportExcel(DataTabledt){if(dt==null||dt.

datagrid数据导出到excel文件给客户端下载的几种方法

datagrid|excel|客户端|数据|下载 方法一:导出到csv文件,存放在服务器端任一路径,然后给客户下载 优点:1.可以进行身份认证后给客户下载,如果放到非web目录就没有对应的url,客户无法随时下载.2.也是因为生成了文件,所以占用了服务器的空间,但是可以把文件名存放到数据库,再次给客户下载的时候不需要重复生成文件.3.csv文件是文本文件,逗号隔开字段,回车隔开行,易于数据导入导出. 实现方法:   SqlConnection conn=new SqlConnection(Sys

如何将包含自定义控件GridView导出到Excel

今天有人问我,如果Girdview模板列里使用了自定义控件,那导出的时候如何处理? 比如该自定义控件包含一个Dropdownlist和三个Label控件,其中用来在页面上显示数据的是其中一个 Label控件,现在的问题是,如果不在PrepareControlForExport()中对该自定义控件进行处理,那么导 出的Excel文件的对应Gridview中使用了自定义控件的列的内容全部相同(为Dropdownlist控件的第一个 Item),但是对该自定义控件进行处理的话,不知道该如何才能正确的取

用PHP生成excel文件到指定目录

  这篇文章主要介绍了用PHP生成excel文件到指定目录的相关资料,需要的朋友可以参考下 最近公司要生成报表,用PHP生成. header("Content-type:application/vnd.ms-excel"); header("Content-Disposition:attachment;filename=test_data.xls"); 我百度了下,貌似这个很快能够实现,但是这个文件却是生成在在浏览器下载的地方, 我想把生成的文件生成到指定的目录,这

asp代码实现access数据导出到excel文件

  asp代码实现access数据导出到excel文件: 一,下面是导出XLS格式 <%  dim referer  referer = Request.ServerVariables("HTTP_REFERER")  Dim CName,action  action=request.Form("action")  CName="../../Excel/"  dim daytime  'daytime=year(now())&&qu

python通过openpyxl生成Excel文件的方法

  本文实例讲述了python通过openpyxl生成Excel文件的方法.分享给大家供大家参考.具体如下: 使用前请先安装openpyxl: ? 1 easy_install openpyxl 通过这个模块可以很方便的导出数据到Excel ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 from op

上传-gridview导出数据到文件

问题描述 gridview导出数据到文件 asp.net中怎么把gridview中的数据写入一个文件,再保存到桌面 还有文件中的数据怎么上传到gridview中 解决方案 using System;using System.Web;using System.Web.UI;using System.IO;using System.Web.UI.WebControls;namespace DotNet.Utilities{ public class ExportExcel { protected v