跳至页脚内容
使用 IRONXL

使用 IronXL 将 GridView 导出到 Excel 并设置格式(C#)。

使用 C# 将 GridView 数据导出到 Excel 并设置格式

在 ASP.NET Web 开发中,将 GridView 数据导出到 Excel 时保留单元格颜色、字体和格式是一个常见的挑战,特别是对于面向全球受众(en-US)的应用程序而言。 将 GridView 导出到 Excel 并进行格式化的 C# 过程在服务器端处理,服务器端负责管理数据绑定、渲染和输出格式化。 使用new HtmlTextWriternew StringWriter写入控制输出的传统方法经常会生成带有格式警告的 Excel 文件。 一些开发者找到了一种变通方法,即使用public override void VerifyRenderingInServerForm ; 必须添加VerifyRenderingInServerForm事件,以避免导出过程中出现运行时错误。 但是,这种方法会创建基于 HTML 的文件,而 MS Excel 可能无法正确渲染这些文件。 要成功导出到 Excel,必须将 GridView 放置在带有runat="server" form 标签内。 默认情况下,某些导出选项或设置可能会生效,除非明确更改,例如ExportAll选项或最大行数。 在 C# 和 VB.NET 实现中,导出逻辑通常是通过按钮点击事件触发的,其中事件处理程序签名包含诸如 C# 中的object sender, EventArgs e或 VB.NET 中的ByVal sender As Object, ByVal e As EventArgs类的参数。

IronXL提供了一种更简洁的解决方案——创建具有完整格式控制的原生 Excel 文件,无需安装 Microsoft Office。 本文演示了如何在 ASP.NET Web Forms 和 Windows Forms 应用程序中将 GridView 导出到 Excel。

数据导出简介

将 GridView 中的数据导出到 Excel 文件是许多 ASP.NET 和 Windows Forms 应用程序的一项基本功能。 无论您是构建报表仪表板还是为用户提供下载数据进行离线分析的功能,将 GridView 内容导出到 Excel 表格的功能都能确保您的数据在 MS Excel 中易于访问和处理。 该过程通常涉及将 GridView 控件中的值(例如行、列和单元格)传输到结构化的 Excel 文件中,同时保持所需的格式和样式。

一个设计完善的导出到 Excel 的解决方案不仅仅是复制数据; 它还保留字符串样式,应用交替行颜色以提高可读性,并设置正确的内容布局,以便用户可以将文件下载为附件。 开发人员经常使用代码示例来演示如何以编程方式创建 Excel 文件,利用诸如public override void VerifyRenderingInServerForm之类的方法来避免 ASP.NET 中的运行时错误,以及Response.AddHeader来指定文件名和附件类型。 在 Windows Forms 中,导出过程类似,但文件是直接保存到系统中,而不是传输到浏览器。

格式是专业导出过程中的一个关键环节。 通过自定义字体、背景颜色和边框,您可以确保导出的 Excel 表格与您的应用程序的外观和风格相匹配。 使用诸如new StringWriternew HtmlTextWriter之类的对象,或者更高级的库,您可以控制 Excel 文件的输出和结构。错误处理也至关重要——通过捕获异常(例如Exception ex ),即使在导出过程中出现问题,您也可以提供流畅的用户体验。

如何使用对象发送器将 Windows Forms DataGridView 导出到 Excel 文件并保留单元格格式

最可靠的方法是提取 GridView 的底层 DataTable,并通过编程方式构建样式化的 Excel 表格。 这种方法可以避免格式错误,并能完全控制标题样式、交替行颜色和边框。 请注意,如果您的页面使用了分页功能,请在导出前禁用分页功能以捕获所有记录。

Windows Forms 应用程序使用 DataGridView 控件而不是基于 Web 的 GridView 控件。 导出到 Excel 的过程遵循相同的模式——从行和单元格集合中提取单元格值,然后应用格式。

using IronXL;
using IronXL.Styles;
using System;
using System.Data;
using System.IO;
using System.Windows.Forms;

private void btnExport_Click(object sender, EventArgs e)
{
    DataTable dt = (DataTable)GridView1.DataSource;
    WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet workSheet = workBook.DefaultWorkSheet;
    // Export header row with formatting
    for (int col = 0; col < dt.Columns.Count; col++)
    {
        workSheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
        var cell = workSheet.GetCellAt(0, col);
        cell.Style.Font.Bold = true;
        cell.Style.SetBackgroundColor("#4472C4");
        cell.Style.Font.Color = "#FFFFFF";
        cell.Style.BottomBorder.Type = BorderType.Thin;
    }
    // Export data rows with alternating row color
    for (int row = 0; row < dt.Rows.Count; row++)
    {
        for (int col = 0; col < dt.Columns.Count; col++)
        {
            var cellValue = dt.Rows[row][col];
            workSheet.SetCellValue(row + 1, col, cellValue?.ToString() ?? "");
            var cell = workSheet.GetCellAt(row + 1, col);
            string bgColor = (row % 2 == 0) ? "#D6DCE5" : "#FFFFFF";
            cell.Style.SetBackgroundColor(bgColor);
            cell.Style.BottomBorder.Type = BorderType.Thin;
        }
    }
    // Save and write response for download
    MemoryStream stream = workBook.ToStream();
    using (SaveFileDialog saveFileDialog = new SaveFileDialog())
    {
        saveFileDialog.Filter = "Excel Files|*.xlsx";
        saveFileDialog.Title = "Save Excel File";
        saveFileDialog.FileName = "GridViewExport.xlsx";
        if (saveFileDialog.ShowDialog() == DialogResult.OK)
        {
            using (FileStream fileStream = new FileStream(saveFileDialog.FileName, FileMode.Create, FileAccess.Write))
            {
                stream.WriteTo(fileStream);
            }
            MessageBox.Show("Export successful.", "Export", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }
}
using IronXL;
using IronXL.Styles;
using System;
using System.Data;
using System.IO;
using System.Windows.Forms;

private void btnExport_Click(object sender, EventArgs e)
{
    DataTable dt = (DataTable)GridView1.DataSource;
    WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet workSheet = workBook.DefaultWorkSheet;
    // Export header row with formatting
    for (int col = 0; col < dt.Columns.Count; col++)
    {
        workSheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
        var cell = workSheet.GetCellAt(0, col);
        cell.Style.Font.Bold = true;
        cell.Style.SetBackgroundColor("#4472C4");
        cell.Style.Font.Color = "#FFFFFF";
        cell.Style.BottomBorder.Type = BorderType.Thin;
    }
    // Export data rows with alternating row color
    for (int row = 0; row < dt.Rows.Count; row++)
    {
        for (int col = 0; col < dt.Columns.Count; col++)
        {
            var cellValue = dt.Rows[row][col];
            workSheet.SetCellValue(row + 1, col, cellValue?.ToString() ?? "");
            var cell = workSheet.GetCellAt(row + 1, col);
            string bgColor = (row % 2 == 0) ? "#D6DCE5" : "#FFFFFF";
            cell.Style.SetBackgroundColor(bgColor);
            cell.Style.BottomBorder.Type = BorderType.Thin;
        }
    }
    // Save and write response for download
    MemoryStream stream = workBook.ToStream();
    using (SaveFileDialog saveFileDialog = new SaveFileDialog())
    {
        saveFileDialog.Filter = "Excel Files|*.xlsx";
        saveFileDialog.Title = "Save Excel File";
        saveFileDialog.FileName = "GridViewExport.xlsx";
        if (saveFileDialog.ShowDialog() == DialogResult.OK)
        {
            using (FileStream fileStream = new FileStream(saveFileDialog.FileName, FileMode.Create, FileAccess.Write))
            {
                stream.WriteTo(fileStream);
            }
            MessageBox.Show("Export successful.", "Export", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }
}
$vbLabelText   $csharpLabel

此示例创建了一个按钮点击处理程序,带有object senderEventArgs e参数。 该代码将 GridView 的DataSource属性强制转换为 DataTable,从而可以访问数据表中的所有值。 WorkBook.Create方法初始化一个新的 Excel 文件, DefaultWorkSheet返回活动工作表。 您可以在导出过程中通过SheetName属性指定工作表名称。

DataGridView导出功能通过HeaderText属性访问列标题。 单元格值来自Cells集合,使用行索引和列索引。 var关键字与空条件运算符配合使用,通过将 null 转换为空字符串来处理空单元格。 与使用Response将文件写入 Web 下载的 ASP.NET 不同,Windows Forms 直接保存到系统中。 IronXL 创建的原生 XLSX 或 XLS 格式文件可以在 MS Excel 中打开而不会出现格式警告。

输出

使用 IronXL 将 GridView 导出到 Excel 并设置格式(C#):图 1 - GridView 输出

使用 IronXL 将 GridView 导出到 Excel 并设置格式(C#):图 2 - Excel 输出

使用 IronXL 将 GridView 导出到 Excel 并设置格式(C#):图 3 - 消息输出

结论

IronXL 将 GridView 导出到 Excel 的格式设置难题变成了一个简单的过程。 该库可处理标题样式、交替行颜色、条件格式和边框——无需 Office 依赖项。 我们希望本教程能帮助您在 .NET 应用程序中创建专业的 Excel 导出文件。

立即开始免费试用,导出带格式的 GridView 数据,或探索部署许可选项。 如需支持和详细信息,请参阅文档

常见问题解答

如何使用 C# 将 GridView 数据导出到 Excel?

您可以使用 IronXL 库在 C# 中将 GridView 数据导出到 Excel。它允许您以编程方式轻松创建 Excel 文件并导出数据,包括格式和样式。

为什么我应该使用 IronXL 来导出 GridView 数据?

IronXL 通过其直观的 API 简化了导出 GridView 数据的过程,让您可以轻松保持格式并应用样式,而这在传统方法中可能具有挑战性。

IronXL在将GridView导出到Excel时是否支持格式设置?

是的,IronXL 支持多种格式设置选项,包括字体、颜色和单元格样式,确保您导出的 Excel 文件看起来专业,并保持预期的设计。

我可以自定义从 GridView 数据生成的 Excel 文件的外观吗?

IronXL 为 Excel 文件提供了一系列自定义选项,允许您在从 GridView 导出时调整单元格样式、字体、颜色等,以满足您的特定要求。

是否可以使用 IronXL 将大型 GridView 数据集导出到 Excel?

IronXL 能够高效地处理大型数据集,确保您可以将大量的 GridView 数据导出到 Excel 而不会出现性能问题。

与使用其他方法相比,使用 IronXL 将 GridView 数据导出到 Excel 有哪些优势?

IronXL 提供了一种更精简、更灵活的导出 GridView 数据的方法,对格式化、自定义和处理大型数据集提供了强大的支持,使其优于许多其他方法。

将 GridView 导出到 Excel 时如何保持数据完整性?

IronXL 通过在从 GridView 导出到 Excel 的过程中准确转换和保留数据类型和格式来确保数据完整性。

IronXL 能否从具有复杂结构的 GridView 控件中导出数据?

是的,IronXL 可以有效地处理和导出具有复杂结构的 GridView 控件中的数据,并在生成的 Excel 文件中保持层次结构和格式。

IronXL可以将GridView数据导出为哪些文件格式?

IronXL 主要将数据导出为 Excel 格式(如 XLSX),但也支持其他格式(如 CSV),可根据您的需要提供灵活性。

IronXL 是否支持导出带有条件格式的 GridView?

IronXL 支持条件格式设置,允许您设置规则和样式,以便在将 GridView 数据导出到 Excel 时根据单元格值动态调整。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。