【问题标题】:Issue Exporting Grid View Data To Excel将网格视图数据导出到 Excel 的问题
【发布时间】:2015-03-01 20:02:37
【问题描述】:

我必须在我的网页中进行分页,以便您搜索姓名列表并将结果返回到网格视图中。出现搜索结果时,会出现导出按钮。我有一个导出按钮供用户单击,它将数据从网格视图导出到xlsx格式的excel中。这是我当前的代码:

平均售价

<asp:TableCell>
     <asp:DataGrid ID="ResultGrid" runat="server"
      AutoGenerateColumns="false"
      EnableViewState="false" 
</asp:TableCell>
<asp:TableCell>
     <asp:Button class="myClass" ID="export" runat="server" OnClick="ExportBtn_Click" Text="Export" />
</asp:TableCell>

C#

protected void ExportBtn_Click(object sender, EventArgs e)
    {
        Response.Clear();
        Response.AddHeader("content-disposition", "attachment;filename=myexcelfile.xls");

        Response.ContentType = "application/vnd.xls";

        StringWriter sw = new StringWriter();
        HtmlTextWriter htw = new HtmlTextWriter(sw);

        ResultGrid.RenderControl(htw);
        Response.Write(sw.ToString());
        Response.End();
    }

    public override void VerifyRenderingInServerForm(Control control)
    {

    }

目前这会下载一个空白的 excel 文件......即使我的网格视图在搜索时有一个项目。

我的另一个问题(尽管我知道它不赞成)是如何导出为xlsx 而不是xls。如果我将xls 替换为xlsx,当我单击导出按钮时(当它试图在excel 中打开时),它会告诉我格式错误。

总结一下,我的两个问题是:为什么即使我在网格视图中返回了一行,它在 excel 中什么也不返回,以及如何导出为 xlsx 而不是 xls

【问题讨论】:

  • 您没有导出为 XLSX 或 XLS。您正在导出为 HTML,由于文件扩展名而伪装成 XLS。这也是不受欢迎的,因为用户在打开文档时会收到警告,说明它可能已损坏。相反,您需要找到一个能够生成实际 Open Office XML 电子表格文件 (.xlsx) 的库并使用它。我特别喜欢EPPlus,但请注意,要求我们推荐一个特定的库是题外话。
  • 嗯,我现有的代码有修复吗
  • 我什至不明白你最后的评论。您在问是否有办法在不更改代码的情况下修复您的代码?显然,如果你想改变它的工作方式,你必须改变代码。
  • 正确,询问您是否对如何使用我现有的代码解决我的问题有任何其他意见
  • 我的第一条评论解释了为什么你现有的代码不能工作。因此,您现有的代码不能也不应该被使用。

标签: c# asp.net excel gridview


【解决方案1】:

解决了!!! excel 是空白的,因为您没有向它传递任何值

protected void ExportBtn_Click(object sender, EventArgs e)
{     
  ResultGrid();// Datagrid function to fill value 
 Response.ClearContent();
 Response.Buffer = true;
 Response.AddHeader("content-disposition", string.Format("attachment;    filename={0}", "myexcelfile.xls"));
 Response.ContentType = "application/ms-excel";
 StringWriter sw = new StringWriter();
 HtmlTextWriter ht = new HtmlTextWriter(sw);
 ResultGrid.RenderControl(ht);
 Response.Write(sw.ToString());
 Response.End();
}

【讨论】:

    【解决方案2】:

    导出到 Excel 时得到空白电子表格的原因是因为您没有以正确的方式执行此操作。

    您可以使用像 iTextSharp 之类的第三方来正确执行此操作。

    实际上,我在博客中写了一个工作示例:GridView To Excel

    希望对你有帮助。

    【讨论】:

    • iTextSharp 是一个 PDF 库。虽然您可能已经找到了一种让 Excel 打开您正在制作的文件的方法,但还有更好的方法可以绕过它。链接到您的博客很好,但这不能是您的全部答案。将其作为评论发布会更合适,因为答案应该是自包含的。
    • 明白这一点。但我所做的只是简单地提供一个解决方案(一个可行的解决方案)。我提供了一个工作示例的链接,以指导他找到问题的答案。
    • 我理解你,但显然你不理解我。您的大部分答案不能依赖可能中断的外部链接。您需要在答案中包含链接中的相关部分,或者删除您的答案并将其变成评论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多