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;
-
반환 값으로 DataTable을 생성하는
CreateData()
라는 메서드를 사용하여datacreation
이라는 클래스를 만들었습니다.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);
-
그 다음에는 쉼표로 DataTable
dt
에서 데이터를 쓰는foreach
루프를 사용합니다.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 Form 만들기
DataTable에 데이터를 만들고 쉼표로 구분한 후 다음 단계는 데이터를 표시하고 .csv
형식으로 변환할 수 있는 Windows Form을 구성하는 것입니다.
-
시작하기 위해 아래와 같이 Windows Form을 만들고 그 안에
DataGridView
와데이터를 CSV로 변환
이라는 버튼을 넣습니다. 생성된 데이터를 표시하는DataGridView
와 DataTable을 CSV로 변환하는 버튼이 포함되어 있습니다. -
Windows Form 실행이 완료되면 다음과 같이 표시됩니다.
Windows Form용 코드 작성
Windows Form을 만든 후 다음 단계는 데이터를 CSV로 변환
버튼에 대한 코드를 작성하는 것입니다.
-
아래 나열된 메서드를 호출하여 개체를 초기화하고 데이터로 채웁니다.
DataTable dt = datacreation.CreateData();
-
OpenSavefileDialog()
는 주어진 이름으로 파일을 저장하는 데 사용할 수 있습니다.string filename = OpenSavefileDialog();
-
ConvertTocsv
는 우리가 만든 데이터에서 CSV 파일을 만드는 데 사용됩니다.dt.ConvertTocsv(filename);
Windows Form 소스 코드
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