在 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