0

我尝试了网站中提到的一些解决方案,例如Using System.Microsoft.Office.Exceland Excel = System.Microsoft.Office.Excel,但它不起作用....在这里,我试图获取表格中的数据并以 .xls 格式下载到服务器中指定位置的文件和然后给用户一个下载文件的链接。这是导出的代码`

protected void btnExcelExport_Click(object sender, EventArgs e)
{
    System.Text.StringBuilder sb = new System.Text.StringBuilder();
    using (StringWriter sw = new StringWriter(sb))
    {
        using( HtmlTextWriter htw = new HtmlTextWriter(sw))
        {
            //  Create a form to contain the grid
            Table table = new Table();
            // get gridlines from gridview
            table.GridLines = GridView2.GridLines;
            if (GridView2.HeaderRow != null)
            {                       
                table.Rows.Add(GridView2.HeaderRow);
            }
            foreach (GridViewRow row in GridView2.Rows)
            {
                table.Rows.Add(row);
            }
            if (GridView2.FooterRow != null)
            {
                table.Rows.Add(GridView2.FooterRow);
            }    
            //  render the table into the htmlwriter
            table.RenderControl(htw);    
        }
        var myRootPath = Server.MapPath("~");
        var docPath = Path.GetFullPath(Path.Combine(myRootPath, "/Compare/c.xls")); 
        File.WriteAllText(docPath, sw.ToString());  
    }
    dwndlink.Visible = true;

}

当这是链接按钮的代码时:

 protected void dwnlink(object sender, EventArgs e)
 {   
     var webRootPath = Server.MapPath("~");
     var docPath = Path.GetFullPath(Path.Combine(webRootPath, "/Compare/c.xls"));

     string name = Path.GetFileName(docPath);
     Response.AppendHeader("content-disposition", "attachment; filename=" + name);
     Response.ContentType = "Application/vnd.ms-excel";
     Response.TransmitFile(docPath);
     Response.End();
 }

因此,当用户打开下载的文件时,会发出警告,因为它不在同一个扩展名中。为什么会出现这种情况..??

我尝试使用各个站点提供的解决方案,但无济于事...

谢谢

4

2 回答 2

0

尝试更改Response.ContentType = "application/vnd.xls";Response.ContentType = "application/vnd.ms-excel"

微软文档说:

“当前的设计不允许您在 Excel 中打开网站中的 HTML 内容......因此,返回 HTML 并将 MIME 类型设置为 XLS 之类的 ASP 页面试图强制 HTML 在 Excel 中而不是在 Web 中打开浏览器(如预期)将始终收到安全警报...如果您使用 HTML MIME 类型,则 Web 浏览器将打开内容而不是 Excel。因此,由于缺少特殊的特定于 Excel 的 HTML/MHTML 的 MIME 类型。如果您同时控制需要访问它的 Web 服务器和客户端桌面,则可以添加自己的 MIME 类型,但最好的选择是使用不同的文件格式或提醒您的警告的用户并告诉他们在对话框中选择是。”

也访问这个网站:http ://devblog.grinn.net/2008/06/file-you-are-trying-to-open-is-in.html

于 2012-12-06T05:46:25.047 回答
0

尝试使用

Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
于 2012-12-06T05:42:06.753 回答