C# | 导出DataGridView中的数据到Excel、CSV、TXT
@[toc]
前言
从DataGridView中导出数据到Excel、CSV、TXT是开发中非常常见的一种需求。本文将讲解如何高效的完成对这三种格式的单向导出。
倘若直接写三种格式的导出必定会产生大量的重复代码,而从表中获取结构化数据的思路是基本一致的,因此有一个思路是先将DataGridView中的数据转换为DataTable对象,再进一步导出成我们的目标格式。
本文将介绍如何将DataGridView中的数据转换为DataTable格式,并提供将DataTable转换为Excel、CSV、TXT三种格式的例子。
将DataGridView中的数据转换为DataTable格式,有助于我们更方便地对数据进行处理和操作,使我们可以轻松地使用C#中的各种数据处理和操作函数,例如排序、筛选、统计等。
通过本文的介绍和示例,您将能够快速掌握将DataGridView中的数据导出到各种格式的技巧。
DataGridView数据转存DataTable
以下是转换的思路:
- 首先创建了一个新的DataTable对象。
- 然后我们使用DataGridView的列标题和值类型添加了DataTable的列。
- 接下来,我们使用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#编程语言中的文件导出和数据格式转换技术。
如果您有任何问题或建议,请在下方留言。