在 C# 中将 DataTable 转换为 CSV
本文将引导你使用 C# 将 DataTable 转换为 CSV 文件。首先,我们必须知道 CSV 是什么,所以让我们开始吧。
逗号拆分值(也称为 CSV 文件)中的数据由逗号而不是空格分隔到各自的列中。CSV 文件的另一个用途是在数据自动放入 Excel 中的相应单元格时立即在 Excel 中打开文件。
在 C#
中将 DataTable 转换为 CSV
将 DataTable 转换为 CSV 文件的第一步是创建 DataTable。以下段落概述了这样做所涉及的步骤。
创建和填充 DataTable
-
首先,我们必须导入以下库:
using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks;
-
我们创建了一个名为
datacreation
的类,其中包含一个名为CreateData()
的方法,该方法生成一个 DataTable 作为其返回值。public static class datacreation { public static DataTable CreateData() {} }
-
从数据输入开始,我们必须在
CreateData()
中创建一个名为dt
的DataTable
对象。DataTable dt = new DataTable();
-
初始化对象后,下一步是将数据列添加到 DataTable
dt
。我们已经包含了Rollnum
、Firstname
、Lastname
和Subject
字段,你可以自由添加你需要的任何其他区域。dt.Columns.Add("RollNum", typeof(int)); dt.Columns.Add("Firstname", typeof(string)); dt.Columns.Add("Lastname", typeof(string)); dt.Columns.Add("Subjects", typeof(string));
-
接下来,在这些列或字段中填写信息。
dt.Rows.Add(3227, "Zeeshan", "Khan", "C#"); dt.Rows.Add(3290, "Bubby", "Zeeshan", "Java"); dt.Rows.Add(3247, "Osama", "shanii", "C++"); dt.Rows.Add(3156, "Haseeb", "Bhatti", "Python"); dt.Rows.Add(3223, "Saad", "Shukhri", "Mongo Db"); dt.Rows.Add(3267, "Sheraz", "Malik", "MySQl"); dt.Rows.Add(3288, "Nabeel", "Sindho", "PHP"); dt.Rows.Add(3299, "Ahsan", "Chishti", "C");
-
CreateData()
函数将返回 DataTable 类型的表。return dt;
在 C#
中将 DataTable 转换为 CSV
创建 DataTable 后,下一步是编写将 DataTable 转换为 CSV 的代码。
-
我们在
implementCSV
类中添加了一个名为ConvertTocsv
的新方法。变量dt
和path
是它采用的参数。public static class implementCSV { public static void ConvertTocsv(this DataTable dt, string path) {} }
-
在
ConvertTocsv
方法中,我们创建了一个名为s
的StreamWriter
对象,它将在指定路径中写入数据。StreamWriter s = new StreamWriter(path, false);
-
我们将使用
for
循环通过在每列之间插入逗号来拆分 DataTable 中的数据。for (int i = 0; i < dt.Columns.Count; i++) { s.Write(dt.Columns[i]); if (i < dt.Columns.Count - 1) { s.Write(","); } } s.Write(s.NewLine);
-
之后,我们现在将使用一个
foreach
循环,它将使用逗号从 DataTabledt
写入数据。foreach (DataRow dr in dt.Rows) { for (int i = 0; i < dt.Columns.Count; i++) { if (!Convert.IsDBNull(dr[i])) { string value = dr[i].ToString(); if (value.Contains(',')) { value = String.Format("\"{0}\"", value); s.Write(value); } else { s.Write(dr[i].ToString()); } } if (i < dt.Columns.Count - 1) { s.Write(","); } } s.Write(s.NewLine); }
完整的源代码
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DataTableExport {
public static class datacreation {
public static DataTable CreateData() {
DataTable dt = new DataTable();
dt.Columns.Add("RollNum", typeof(int));
dt.Columns.Add("Firstname", typeof(string));
dt.Columns.Add("Lastname", typeof(string));
dt.Columns.Add("Subjects", typeof(string));
dt.Rows.Add(3227, "Zeeshan", "Khan", "C#");
dt.Rows.Add(3290, "Bubby", "Zeeshan", "Java");
dt.Rows.Add(3247, "Osama", "shanii", "C++");
dt.Rows.Add(3156, "Haseeb", "Bhatti", "Python");
dt.Rows.Add(3223, "Saad", "Shukhri", "Mongo Db");
dt.Rows.Add(3267, "Sheraz", "Malik", "MySQl");
dt.Rows.Add(3288, "Nabeel", "Sindho", "PHP");
dt.Rows.Add(3299, "Ahsan", "Chishti", "C");
return dt;
}
}
public static class implementCSV {
public static void ConvertTocsv(this DataTable dt, string path) {
StreamWriter s = new StreamWriter(path, false);
for (int i = 0; i < dt.Columns.Count; i++) {
s.Write(dt.Columns[i]);
if (i < dt.Columns.Count - 1) {
s.Write(",");
}
}
s.Write(s.NewLine);
foreach (DataRow dr in dt.Rows) {
for (int i = 0; i < dt.Columns.Count; i++) {
if (!Convert.IsDBNull(dr[i])) {
string value = dr[i].ToString();
if (value.Contains(',')) {
value = String.Format("\"{0}\"", value);
s.Write(value);
} else {
s.Write(dr[i].ToString());
}
}
if (i < dt.Columns.Count - 1) {
s.Write(",");
}
}
s.Write(s.NewLine);
}
s.Close();
}
}
}
创建 Windows 窗体
在 DataTable 中创建数据并使用逗号分隔后,下一步是构建一个 Windows 窗体,可以在其中显示数据,然后将其转换为 .csv
格式。
-
首先,让我们创建一个 Windows 窗体,如下所示,在其中,我们将放置一个
DataGridView
和一个名为Convert data to CSV
的按钮。包括显示创建数据的DataGridView
和将 DataTable 转换为 CSV 的按钮。 -
执行完 Windows 窗体后,它将如下所示:
为 Windows 窗体编写代码
创建 Windows 窗体后,下一步是编写 将数据转换为 CSV
按钮的代码。
-
通过调用下面列出的方法初始化一个对象并用数据填充它。
DataTable dt = datacreation.CreateData();
-
OpenSavefileDialog()
可用于以给定名称保存文件。string filename = OpenSavefileDialog();
-
ConvertTocsv
将用于从我们创建的数据创建一个 CSV 文件。dt.ConvertTocsv(filename);
Windows 窗体源代码
public Form1() {
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) {
DataTable dt = datacreation.CreateData();
dataGridView1.DataSource = dt;
}
private void btnCSV_Click(object sender, EventArgs e) {
DataTable dt = datacreation.CreateData();
string filename = OpenSavefileDialog();
dt.ConvertTocsv(filename);
}
private string OpenSavefileDialog() {
string filename = null;
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "csv File|*.csv";
saveFileDialog.Title = "Save";
DialogResult dialogResult = saveFileDialog.ShowDialog();
if (dialogResult == DialogResult.OK) {
filename = saveFileDialog.FileName;
}
return filename;
}
I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.
LinkedIn