2012-08-08 166 views
-2

我有一个asp.net页面,其中有一个gridview和一个按钮。 按钮点击事件我已经写了输出gridview到excel的代码,它工作得很好。 但是当我尝试打开导出的Excel文件它显示一个对话框,说:GridView导出到Excel

“你试图打开该文件是由文件extension.Verify指定不同的格式 该文件没有损坏 并且在打开文件之前来自可信来源“。

不仅如此,我发送了Excel文件在Gmail附件,并试图在手机中打开它,它会打开一个HTML file.What时间可以为了这个,我做的,因为我的客户端将使用移动查看邮件。

+0

你试试..?把你的代码,你有尝试 – 2012-08-08 10:29:40

+0

请显示您的代码。 – SMK 2012-08-08 10:30:03

+1

完全重复http://stackoverflow.com/questions/9799726/why-showing-error-message-while-opening-xls-file – SMK 2012-08-08 10:31:18

回答

0

当我导出到excel时,我只是创建了一个逗号分隔的文件,并给它一个excel文件扩展名。当我开始使用带双引号的逗号分隔时,该消息就消失了。

“一”,“二”,“三”,而不是一个,两个,三个

1

在您的按钮单击事件:

 protected void btnExcel_Click(object sender, ImageClickEventArgs e) 
    { 
     //export to excel 
     Response.Clear(); 
     Response.AddHeader("content-disposition", "attachment;filename=FileName.xls"); 
     Response.Charset = ""; 

     // If you want the option to open the Excel file without saving then 
     // comment out the line below 
     // Response.Cache.SetCacheability(HttpCacheability.NoCache); 
     Response.ContentType = "application/vnd.xls"; 
     System.IO.StringWriter stringWrite = new System.IO.StringWriter(); 
     System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite); 
     //GV is the ID of gridview 
     GV.RenderControl(htmlWrite); 
     Response.Write(stringWrite.ToString()); 
     Response.End(); 
    } 

,并覆盖网页代码这种方法的背后:

public override void VerifyRenderingInServerForm(Control control) 
{ 
    /* Confirms that an HtmlForm control is rendered for the specified ASP.NET 
     server control at run time. */ 
} 
2

我建议使用Excel文件扩展名创建实际的Excel文件,而不是CSV或HTML。

完成此操作的一个简单方法是使用ClosedXML

为此,请从codeplex站点下载ClosedXML.dll和DocumentFormat.OpenXml.dll,并将它们作为参考添加到ASP.NET项目中。然后,在按钮单击事件中,您可以简单地设置Excel工作簿,根据您绑定到GridView的相同DataTable创建工作表,并将工作簿文件保存在HTTP响应中。事情是这样的:

var wb = new ClosedXML.Excel.XLWorkbook(); 
DataTable dt = GetTheDataTable(); 
dt.TableName = "This will be the worksheet name"; 

wb.Worksheets.Add(dt); 

Response.Clear(); 
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
Response.AddHeader("content-disposition", "attachment;filename=\"FileName.xlsx\""); 

using (var ms = new System.IO.MemoryStream()) { 
    wb.SaveAs(ms); 
    ms.WriteTo(Response.OutputStream); 
    ms.Close(); 
} 

Response.End(); 

我会用ClosedXML去了其他的替代品,因为许可限制较少,该文件是一流的,开发商是有帮助的,友好的,并且该项目目前非常活跃。