C# 将 GridView 数据导出为 Excel 文件的工具类实现

键盘旁的猫
键盘旁的猫
发布时间:2026-10-14| 4人浏览过
原创

本文提供了一个完整的 C# 工具类,用于在 ASP.NET WebForm 环境下将 GridView 控件的数据导出为 .xls 格式的 Excel 文件。该类通过构建 HTML 表格并设置相应的 HTTP 响应头信息,实现了数据的即时下载。

结果与目标

调用该工具类后,用户端会触发浏览器下载一个文件名包含时间戳的 .xls 文件。文件内容即为当前 GridView 中显示的所有表格数据,包括表头与行列内容。

准备条件

  • 开发环境:Visual Studio 及 .NET Framework 支持 WebForm 项目的版本。
  • 依赖命名空间:需引入 System.Web, System.IO, System.Web.UI.WebControls。
  • 页面配置:GridView 所在的 .aspx 页面需要正确绑定数据源,且未禁用 ViewState(通常保持默认)。

真实操作顺序

第1步:创建导出工具类

目的:封装 Excel 导出的核心逻辑,提供统一的接口。

入口:新建一个类文件(如 ExportExcel.cs)。

动作:定义 ExportData 方法。该方法负责接收 GridView 对象,将其 Render 为 HTML 字符串,并通过 HttpResponse 下发给浏览器。

重要参数:文件名生成规则包含日期时间,防止并发下载冲突;字符编码设置为 GB2312 或 UTF-8 以兼容中文。

using System;
using System.Web;
using System.Web.UI;
using System.IO;
using System.Web.UI.WebControls;

namespace DotNet.Utilities
{
    public class ExportExcel
    {
        /// <summary>
        /// 根据 GridView 对象导出 Excel
        /// </summary>
        /// <param name="obj">需要导出的 GridView 实例</param>
        public void ExportData(GridView obj)
        {
            try
            {
                // 1. 初始化变量
                string style = "";
                string filename = string.Empty;

                if (obj.Rows.Count > 0)
                {
                    // 添加基础样式,确保文本列不会科学计数法显示
                    style = @"<style> .text { mso-number-format:\@; } </style>";
                    DateTime dt = DateTime.Now;
                    filename = dt.Year.ToString() + dt.Month.ToString() + dt.Day.ToString()
                             + dt.Hour.ToString() + dt.Minute.ToString() + dt.Second.ToString();
                }
                else
                {
                    style = "no data.";
                    filename = DateTime.Now.ToString("yyyyMMddHHmmss");
                }

                // 2. 清除并重置 Response 输出
                HttpContext.Current.Response.ClearContent();
                HttpContext.Current.Response.ContentType = "application/ms-excel";
                HttpContext.Current.Response.Charset = "GB2312";
                HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");

                // 3. 设置下载头信息
                HttpContext.Current.Response.AddHeader("content-disposition", 
                    "attachment; filename=ExportData" + filename + ".xls");

                // 4. 将 GridView 渲染为 HTML
                StringWriter sw = new StringWriter();
                HtmlTextWriter htw = new HtmlTextWriter(sw);
                obj.RenderControl(htw);

                // 5. 写入样式和 HTML 内容到响应流
                HttpContext.Current.Response.Write(style);
                HttpContext.Current.Response.Write(sw.ToString());

                // 6. 结束响应
                HttpContext.Current.Response.End();
            }
            catch
            {
                // 建议在实际项目中记录异常日志
            }
        }
    }
}

第2步:在前端代码中调用

目的:触发导出操作。

入口:按钮点击事件或后端处理逻辑。

动作:实例化 ExportExcel 类,调用 ExportData 方法并传入当前的 GridView 实例。

// 假设在 Button_Click 事件中
protected void btnExport_Click(object sender, EventArgs e)
{
    DotNet.Utilities.ExportExcel export = new DotNet.Utilities.ExportExcel();
    export.ExportData(myGridView); // myGridView 是你的 GridView 控件 ID
}

完成判断

执行上述操作后,检查浏览器是否弹出“打开/保存”对话框,文件名形如 ExportData20231027103045.xls。打开该文件,确认数据内容与 GridView 页面上展示的一致,无乱码且格式正常。

原文有依据的排错

  • RenderControl 报错:如果提示“控件必须放在具有 runat=server 的表单标记内”,请确保 GridView 位于 <form runat="server"> 标签内部。
  • 中文乱码:如果导出文件中中文显示异常,请检查 Response.Charset 和 ContentEncoding 是否统一设置为 GB2312(针对旧版 Excel 兼容性更好)或 UTF-8(新版 Excel 支持)。同时 HTML 头部 meta 标签也需对应。
  • 空指针异常:确保在执行导出前,GridView 已经完成了数据绑定(DataBind),否则 Rows.Count 可能为 0 导致样式缺失。

简要总结

本方案通过复用 HTML 渲染机制,将 ASP.NET WebForm 中的表格控件快速转换为 Excel 可识别的文件格式。无需安装 Office 组件或使用复杂的第三方 DLL,代码简洁,易于集成到现有项目中。以上就是C#将GridView数据导出为Excel文件工具的详细内容,更多关于C# WebForm开发的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。