【问题标题】:Exporting asp grid data to excel将asp网格数据导出到excel
【发布时间】:2015-10-29 13:55:24
【问题描述】:

我想将我的网格数据直接导出到 Excel。

我尝试了“HtmlTextWriter”,它允许我下载文件。但下载后我无法打开文件(Excel 抛出错误,文件格式不正确。)

我搜索了一下,发现需要先创建一个XML文件,然后才能导出到Excel。是这样吗?

还是我需要先将该文件保存在我的服务器上然后下载?

或者,如果我可以使用任何 NuGet 包,如 ClosedXML 或任何其他包都会有所帮助。

【问题讨论】:

  • 一个简单的CSV file 就可以了。在记事本中打开时,htmltextwriter 生成的文件是什么样的?
  • 看起来有标签

标签: c# asp.net .net gridview grid


【解决方案1】:

在按钮单击时尝试以下代码

protected void btn_excel_Click(object sender, ImageClickEventArgs e)
{
    try
    {

        Response.Clear();
        Response.Buffer = true;
        Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.xls");
        Response.Charset = "";
        Response.ContentType = "application/vnd.ms-excel";
        using (StringWriter sw = new StringWriter())
        {
            HtmlTextWriter hw = new HtmlTextWriter(sw);

            //To Export all pages
            GridView2.AllowPaging = false;
            work();   // in this function you can bind GridView2

            GridView2.HeaderRow.BackColor = Color.White;
            foreach (TableCell cell in GridView2.HeaderRow.Cells)
            {
                cell.BackColor = GridView2.HeaderStyle.BackColor;
            }
            foreach (GridViewRow row in GridView2.Rows)
            {
                row.BackColor = Color.White;
                foreach (TableCell cell in row.Cells)
                {
                    if (row.RowIndex % 2 == 0)
                    {
                        cell.BackColor = GridView2.AlternatingRowStyle.BackColor;
                    }
                    else
                    {
                        cell.BackColor = GridView2.RowStyle.BackColor;
                    }
                    cell.CssClass = "textmode";
                }
            }

            GridView2.RenderControl(hw);

            //style to format numbers to string
            string style = @"<style> .textmode { } </style>";
            Response.Write(style);
            Response.Output.Write(sw.ToString());
            Response.Flush();
            Response.End();
        }
    }
    catch (Exception ex)
    {

    }

}

【讨论】:

  • 我已经试过了。但是下载excel后会抛出格式不正确的错误。
  • 那么你的软件有问题。你必须在不同的电脑上尝试。
  • 我遇到了错误。 “'GridViewExport.xlx' 的文件格式和扩展名不匹配。文件可能已损坏或不安全。除非您信任其来源,否则不要打开它。您仍然要打开它吗?如果我打开文件我看不到几列。另外,我的第一列是复选框。这会造成问题吗?
  • 你在其他电脑上试过吗?我认为你的 ms office 版本有冲突
【解决方案2】:

最简单的方法是从 Nuget 获取 ClosedXML,然后获取要导出到数据表中的数据,然后使用下面的代码

XLWorkbook wb = new XLWorkbook();
DataTable dt = GetDataTableOrWhatever();
wb.Worksheets.Add(dt,"WorksheetName");

【讨论】:

  • 谢谢听起来不错。你能帮我写更多的代码吗?
  • @Palash 小心不要成为help vampire
  • 我可以试试,如果它与这个问题有关,更新你的问题,否则你需要问另一个问题
  • 不想成为帮助吸血鬼。但厌倦了尝试导出到 eXCEL 的方法。仅供参考,我的网格将第一列作为复选框。帮助赞赏。谢谢
  • 尝试代码,让我们知道你是如何使用它的,如果你遇到任何新问题,请告诉我们,因为这可能会变成远程调试会话
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 2023-03-15
  • 1970-01-01
相关资源
最近更新 更多