当前位置: 首页 > news >正文

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

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

文章目录

  • C# | 导出DataGridView中的数据到Excel、CSV、TXT
    • 前言
    • DataGridView数据转存DataTable
    • DataTable转Excel
      • 方法一、使用Microsoft.Office.Interop.Excel
      • 方法二、使用EPPlus库
      • 方法三、使用NPOI库
    • DataTable转CSV
    • DataTable转TXT
    • DataGridView导出数据为JSON、XML格式
    • 结束语

前言

导出DataGridView中的数据到Excel、CSV、TXT是开发中经常遇到的需求。而将DataGridView中的数据先转换为DataTable格式,再进行导出,是一种常见的实现方式。本文将介绍如何将DataGridView中的数据转换为DataTable格式,并提供将DataTable转换为Excel、CSV、TXT三种格式的例子。

将DataGridView中的数据转换为DataTable格式,有助于我们更方便地对数据进行处理和操作。通过将DataGridView中的数据转换为DataTable格式,我们可以轻松地使用C#中的各种数据处理和操作函数,例如排序、筛选、统计等。同时,将数据转换为DataTable格式还可以提高数据的可读性和可维护性,使我们更容易理解和管理数据。

在本文中,我们将以实际的代码示例为例,演示如何将DataGridView中的数据转换为DataTable格式,并提供将DataTable转换为Excel、CSV、TXT三种格式的例子。通过本文的介绍和示例,您将能够快速掌握将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#编程语言中的文件导出和数据格式转换技术。

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

http://www.lryc.cn/news/59618.html

相关文章:

  • 新规拉开中国生成式AI“百团大战”序幕?
  • 日撸 Java 三百行day31
  • 在线绘制思维导图
  • 月薪20k的性能测试必备技能:发现性能瓶颈掌握性能调优
  • 3、Web前端学习规划:CSS - 学习规划系列文章
  • 城市轨道交通列车时刻表优化问题【最优题解】
  • 常年不卷,按时下班,工作能力强,同事求助知无不言,不扯皮,不拉帮结派,这样的职场清流竟然被裁掉了!...
  • 基于改进多目标灰狼优化算法的考虑V2G技术的风、光、荷、储微网多目标日前优化调度研究(Matlab代码实现)
  • Python 函数、文件与模块
  • 在Spring Boot微服务使用RedisTemplate操作Redis
  • 4月软件测试面试太难,吃透这份软件测试面试笔记后,成功跳槽涨薪30K
  • 人人拥有ChatGPT的时代来临了,这次微软很大方!
  • 【C++11】自动类型推导(Type Inference)
  • 拐点!智能座舱破局2023
  • SAP开发环境ABAP的搭建(客户端和服务器),Developer Key和AccessKey的绕过方法
  • VSCode的C/C++编译调试环境搭建(亲测有效)
  • 物理世界的互动之旅:Matter.js入门指南
  • 在线文章生成器-文章生成器在线生成
  • 第十四届蓝桥杯大赛软件赛省赛-试题 B---01 串的熵 解题思路+完整代码
  • 【Leetcode】消失的数字 [C语言实现]
  • SpringBoot接口 - 如何实现接口限流之单实例
  • 【花雕学AI】深度挖掘ChatGPT角色扮演的一个案例—CHARACTER play : 莎士比亚
  • 腾讯云物联网开发平台 LoRaWAN 透传接入 更新版
  • 4.6--计算机网络之TCP篇之TCP的基本认识--(复习+深入)---好好沉淀,加油呀
  • 一文吃透Elasticsearch
  • CPU占用率高怎么办?正确解决方法在这里!
  • ChatGPT实现用C语言写一个学生成绩管理系统
  • Swagger文档注释
  • pdf怎么转换ppt格式,两个方法转换
  • 深度学习编译器相关的优秀论文合集-附下载地址