C# | 导出DataGridView中的数据到Excel、CSV、TXT

简介: 从DataGridView中导出数据到Excel、CSV、TXT是开发中非常常见的一种需求。本文将讲解如何高效的完成对这三种格式的单向导出。倘若直接写三种格式的导出必定会产生大量的重复代码,而从表中获取结构化数据的思路是基本一致的,因此有一个思路是先将DataGridView中的数据转换为DataTable对象,再进一步导出成我们的目标格式。本文将介绍如何将DataGridView中的数据转换为DataTable格式,并提供将DataTable转换为Excel、CSV、TXT三种格式的例子。

image.png

C# | 导出DataGridView中的数据到Excel、CSV、TXT

@[toc]

前言

从DataGridView中导出数据到Excel、CSV、TXT是开发中非常常见的一种需求。本文将讲解如何高效的完成对这三种格式的单向导出。
倘若直接写三种格式的导出必定会产生大量的重复代码,而从表中获取结构化数据的思路是基本一致的,因此有一个思路是先将DataGridView中的数据转换为DataTable对象,再进一步导出成我们的目标格式。

本文将介绍如何将DataGridView中的数据转换为DataTable格式,并提供将DataTable转换为Excel、CSV、TXT三种格式的例子。

将DataGridView中的数据转换为DataTable格式,有助于我们更方便地对数据进行处理和操作,使我们可以轻松地使用C#中的各种数据处理和操作函数,例如排序、筛选、统计等。

通过本文的介绍和示例,您将能够快速掌握将DataGridView中的数据导出到各种格式的技巧。

DataGridView数据转存DataTable

以下是转换的思路:

  1. 首先创建了一个新的DataTable对象。
  2. 然后我们使用DataGridView的列标题和值类型添加了DataTable的列。
  3. 接下来,我们使用DataGridView的行和单元格值创建了新的DataRow对象,并将其添加到DataTable中。
            // 创建一个新的DataTable对象
            DataTable dt = new DataTable();

            // 添加列
            foreach (DataGridViewColumn column in dataGridView1.Columns)
            {
   
   
                dt.Columns.Add(column.HeaderText, column.ValueType);
            }

            // 添加行
            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
   
   
                DataRow dr = dt.NewRow();
                foreach (DataGridViewCell cell in row.Cells)
                {
   
   
                    dr[cell.ColumnIndex] = cell.Value;
                }
                dt.Rows.Add(dr);
            }

DataTable转Excel

方法一、使用Microsoft.Office.Interop.Excel

添加引用:

using System;
using System.Data;
using System.IO;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;

将DataTable转存为Excel文件:

        public static void Convert(DataTable dt, string filePath)
        {
   
   
            // 创建一个Excel应用程序对象
            Excel.Application excelApp = new Excel.Application();

            // 创建一个新的工作簿
            Excel.Workbook workbook = excelApp.Workbooks.Add(Type.Missing);

            // 创建一个新的工作表并命名为“Sheet1”
            Excel.Worksheet worksheet = (Excel.Worksheet)workbook.ActiveSheet;
            worksheet.Name = "Sheet1";

            // 将DataTable的列名写入工作表中
            for (int i = 0; i < dt.Columns.Count; i++)
            {
   
   
                worksheet.Cells[1, i + 1] = dt.Columns[i].ColumnName;
            }

            // 将DataTable的数据写入工作表中
            for (int i = 0; i < dt.Rows.Count; i++)
            {
   
   
                for (int j = 0; j < dt.Columns.Count; j++)
                {
   
   
                    worksheet.Cells[i + 2, j + 1] = dt.Rows[i][j];
                }
            }

            // 保存工作簿
            workbook.SaveAs(filePath, Excel.XlFileFormat.xlOpenXMLWorkbook, Type.Missing,
                Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange,
                Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

            // 关闭工作簿和Excel应用程序对象
            workbook.Close();
            excelApp.Quit();

            // 释放Excel对象
            System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
        }

方法二、使用EPPlus库

通过NuGet安装EPPlus库:

在Visual Studio中,您可以使用NuGet包管理器来添加EPPlus库。只需在项目中右键单击“引用”,然后选择“管理NuGet包”,并在搜素框中搜索“EPPlus”即可找到EPPlus库,选择安装即可。

将DataTable转存为Excel文件:

        public static void Convert(DataTable dt, string filePath)
        {
   
   
            // 创建一个新的Excel工作簿
            ExcelPackage excelPackage = new ExcelPackage();

            // 创建一个新的工作表并命名为“Sheet1”
            ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets.Add("Sheet1");

            // 将DataTable的列名写入工作表中
            for (int i = 0; i < dt.Columns.Count; i++)
            {
   
   
                worksheet.Cells[1, i + 1].Value = dt.Columns[i].ColumnName;
            }

            // 将DataTable的数据写入工作表中
            for (int i = 0; i < dt.Rows.Count; i++)
            {
   
   
                for (int j = 0; j < dt.Columns.Count; j++)
                {
   
   
                    worksheet.Cells[i + 2, j + 1].Value = dt.Rows[i][j];
                }
            }

            // 保存Excel文件
            FileInfo excelFile = new FileInfo(filePath);
            excelPackage.SaveAs(excelFile);
        }

方法三、使用NPOI库

添加引用:

using System;
using System.Data;
using System.IO;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;

将DataTable转存为Excel文件:

        public static void Convert(DataTable dt, string filePath)
        {
   
   
            // 创建一个新的Excel工作簿
            IWorkbook workbook = new XSSFWorkbook();

            // 创建一个新的工作表并命名为“Sheet1”
            ISheet worksheet = workbook.CreateSheet("Sheet1");

            // 将DataTable的列名写入工作表中
            IRow headerRow = worksheet.CreateRow(0);
            for (int i = 0; i < dt.Columns.Count; i++)
            {
   
   
                ICell cell = headerRow.CreateCell(i);
                cell.SetCellValue(dt.Columns[i].ColumnName);
            }

            // 将DataTable的数据写入工作表中
            for (int i = 0; i < dt.Rows.Count; i++)
            {
   
   
                IRow dataRow = worksheet.CreateRow(i + 1);
                for (int j = 0; j < dt.Columns.Count; j++)
                {
   
   
                    ICell cell = dataRow.CreateCell(j);
                    cell.SetCellValue(dt.Rows[i][j].ToString());
                }
            }

            // 保存Excel文件
            using (FileStream fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write))
            {
   
   
                workbook.Write(fileStream);
            }
        }

DataTable转CSV

添加引用:

using System;
using System.Data;
using System.IO;

将DataTable转存为CSV文件:

        public static void Convert(DataTable dataTable, string filePath)
        {
   
   
            // 创建一个写入器
            using (StreamWriter writer = new StreamWriter(filePath))
            {
   
   
                // 写入表头
                for (int i = 0; i < dataTable.Columns.Count; i++)
                {
   
   
                    writer.Write(dataTable.Columns[i].ColumnName);
                    if (i < dataTable.Columns.Count - 1)
                    {
   
   
                        writer.Write(",");
                    }
                }
                writer.Write(writer.NewLine);

                // 写入表数据
                foreach (DataRow row in dataTable.Rows)
                {
   
   
                    for (int i = 0; i < dataTable.Columns.Count; i++)
                    {
   
   
                        writer.Write(row[i].ToString());
                        if (i < dataTable.Columns.Count - 1)
                        {
   
   
                            writer.Write(",");
                        }
                    }
                    writer.Write(writer.NewLine);
                }
            }
        }

DataTable转TXT

添加引用:

using System;
using System.Data;
using System.IO;

将DataTable转存为TXT文件:

        public static void Convert(DataTable dataTable, string filePath, string delimiter = "\t")
        {
   
   
            // 创建一个写入器
            using (StreamWriter writer = new StreamWriter(filePath))
            {
   
   
                // 写入表头
                for (int i = 0; i < dataTable.Columns.Count; i++)
                {
   
   
                    writer.Write(dataTable.Columns[i].ColumnName);
                    if (i < dataTable.Columns.Count - 1)
                    {
   
   
                        writer.Write(delimiter);
                    }
                }
                writer.Write(writer.NewLine);

                // 写入表数据
                foreach (DataRow row in dataTable.Rows)
                {
   
   
                    for (int i = 0; i < dataTable.Columns.Count; i++)
                    {
   
   
                        writer.Write(row[i].ToString());
                        if (i < dataTable.Columns.Count - 1)
                        {
   
   
                            writer.Write(delimiter);
                        }
                    }
                    writer.Write(writer.NewLine);
                }
            }
        }

DataGridView导出数据为JSON、XML格式

请参考文章:《C# | DataGridView数据转存为Json、XML格式》


结束语

希望本文能够对您有所帮助,并使您更加熟悉C#编程语言中的文件导出和数据格式转换技术。

如果您有任何问题或建议,请在下方留言。

相关文章
|
2月前
|
物联网 数据处理 C#
C#实现上位机开发,串口通信,读写串口数据并处理16进制数据
C#实现上位机开发,串口通信,读写串口数据并处理16进制数据。在自动化、物联网以及工业控制行业中,上位机开发是一项重要的技能。本教程主要介绍使用C#进行上位机开发,重点在于串口通信和数据处理。
431 82
|
2月前
|
文字识别 BI
【图片型PDF】批量识别扫描件PDF指定区域局部位置内容,将识别内容导出Excel表格或批量改名文件,基于阿里云OCR对图片型PDF识别改名案例实现
在医疗和政务等领域,图片型PDF文件(如病历、报告、公文扫描件)的处理需求广泛。通过OCR技术识别这些文件中的文字信息,提取关键内容并保存为表格,极大提高了信息管理和利用效率。本文介绍一款工具——咕嘎批量OCR系统,帮助用户快速处理图片型PDF文件,支持区域识别、内容提取、导出表格及批量改名等功能。下载工具后,按步骤选择处理模式、进行区域采样、批量处理文件,几分钟内即可高效完成数百个文件的处理。
243 8
|
4月前
|
开发框架 .NET Java
C#集合数据去重的5种方式及其性能对比测试分析
C#集合数据去重的5种方式及其性能对比测试分析
57 11
|
4月前
|
开发框架 .NET Java
C#集合数据去重的5种方式及其性能对比测试分析
C#集合数据去重的5种方式及其性能对比测试分析
74 10
|
5月前
|
前端开发
实现Excel文件和其他文件导出为压缩包,并导入
实现Excel文件和其他文件导出为压缩包,并导入
99 1
|
11月前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
304 3
|
5月前
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
91 3
|
4月前
|
存储 安全 编译器
学懂C#编程:属性(Property)的概念定义及使用详解
通过深入理解和使用C#的属性,可以编写更清晰、简洁和高效的代码,为开发高质量的应用程序奠定基础。
169 12
|
5月前
|
设计模式 C# 图形学
Unity 游戏引擎 C# 编程:一分钟浅谈
本文介绍了在 Unity 游戏开发中使用 C# 的基础知识和常见问题。从 `MonoBehavior` 类的基础用法,到变量和属性的管理,再到空引用异常、资源管理和性能优化等常见问题的解决方法。文章还探讨了单例模式、事件系统和数据持久化等高级话题,旨在帮助开发者避免常见错误,提升游戏开发效率。
207 4
|
7月前
|
API C#
C# 一分钟浅谈:文件系统编程
在软件开发中,文件系统操作至关重要。本文将带你快速掌握C#中文件系统编程的基础知识,涵盖基本概念、常见问题及解决方法。文章详细介绍了`System.IO`命名空间下的关键类库,并通过示例代码展示了路径处理、异常处理、并发访问等技巧,还提供了异步API和流压缩等高级技巧,帮助你写出更健壮的代码。
81 2