-2

我有一个asp.net 页面,其中有一个gridview 和一个按钮。在按钮单击事件上,我编写了将 gridview 导出到 excel 的代码,该代码运行良好。但是当我尝试打开那个导出的 excel 文件时,它会显示一个对话框,上面写着:

“您尝试打开的文件的格式与文件扩展名指定的格式不同。在打开文件之前,请确认文件没有损坏并且来自受信任的来源”。

不仅如此,我在gmail中将excel文件作为附件发送并尝试在手机中打开它,当时它以html文件的形式打开。我该怎么做,因为我的客户将使用手机查看邮件。

4

3 回答 3

2

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

实现此目的的一种简单方法是使用ClosedXML

为此,请从 codeplex 站点下载 ClosedXML.dll 和 DocumentFormat.OpenXml.dll,并将它们作为引用添加到您的 ASP.NET 项目中。然后,在您的按钮单击事件中,您可以简单地设置一个 Excel 工作簿,从DataTable您绑定到的相同工作表创建一个工作表GridView,并将工作簿文件保存在 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 而不是其他替代方案,因为许可证限制较少,文档极好,开发人员乐于助人且友好,并且该项目目前非常活跃。

于 2012-08-08T12:53:16.897 回答
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. */
}
于 2012-08-08T10:42:00.097 回答
0

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

“一”、“二”、“三”而不是一、二、三

于 2012-08-08T10:32:43.287 回答