Convertir DataTable a CSV en C#
Este artículo lo guiará a través de la conversión de un DataTable a un archivo CSV usando C#. Para empezar, debemos saber qué es CSV, así que entremos en materia.
Los datos en un Coma Split Values, también conocido como archivo CSV, están separados en sus respectivas columnas por comas en lugar de espacios. Otro uso de un archivo CSV es abrir el archivo en Excel inmediatamente cuando los datos se colocan automáticamente en las celdas correspondientes de Excel.
Convertir DataTable a CSV en C#
El primer paso para convertir un DataTable en un archivo CSV es crear un DataTable. Los pasos necesarios para hacerlo se describen en los siguientes párrafos.
Crear y llenar la tabla de datos
-
Para comenzar, debemos importar las siguientes bibliotecas:
using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks;
-
Creamos una clase llamada
datacreation
con un método llamadoCreateData()
que genera un DataTable como valor de retorno.public static class datacreation { public static DataTable CreateData() {} }
-
Para comenzar con la entrada de datos, tenemos que crear un objeto
DataTable
llamadodt
enCreateData()
.DataTable dt = new DataTable();
-
Después de inicializar el objeto, el siguiente paso es agregar columnas de datos a la DataTable
dt
. Hemos incluido los camposRollnum
,Firstname
,Lastname
ySubject
, y puede agregar cualquier otra área que necesite.dt.Columns.Add("RollNum", typeof(int)); dt.Columns.Add("Firstname", typeof(string)); dt.Columns.Add("Lastname", typeof(string)); dt.Columns.Add("Subjects", typeof(string));
-
A continuación, complete la información en estas columnas o campos.
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");
-
La función
CreateData()
devolverá una tabla del tipo DataTable.return dt;
Convierta el DataTable a CSV en C#
Después de haber creado el DataTable, el siguiente paso es escribir el código que convertirá el DataTable a CSV.
-
Hemos agregado un nuevo método llamado
ConvertTocsv
a la claseimplementCSV
. Las variablesdt
ypath
son los parámetros que toma.public static class implementCSV { public static void ConvertTocsv(this DataTable dt, string path) {} }
-
En el método
ConvertTocsv
, hemos creado un objetoStreamWriter
llamados
, que escribirá datos en la ruta especificada.StreamWriter s = new StreamWriter(path, false);
-
Usaremos un bucle
for
para dividir los datos de DataTable insertando comas entre cada columna.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);
-
Después de eso, ahora utilizaremos un bucle
foreach
, que escribirá datos de DataTabledt
con una coma.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); }
Código fuente completo
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();
}
}
}
Crear un formulario de Windows
Después de crear los datos en el DataTable y separarlos con comas, el siguiente paso es construir un Windows Form donde se pueden mostrar los datos y luego convertirlos al formato .csv
.
-
Para empezar, vamos a crear un Windows Form, como se muestra a continuación, y dentro de él pondremos un
DataGridView
y un botón llamadoConvertir datos a CSV
. Se incluye unDataGridView
que muestra los datos creados y un botón que convierte el DataTable en CSV. -
Cuando haya terminado de ejecutar Windows Form, se verá así:
Escriba el código para el formulario de Windows
Después de haber creado el Windows Form, el siguiente paso es escribir el código para el botón Convertir datos a CSV
.
-
Inicialice un objeto y rellénelo con datos llamando a los métodos que se enumeran a continuación.
DataTable dt = datacreation.CreateData();
-
OpenSavefileDialog()
se puede utilizar para guardar el archivo con el nombre dado.string filename = OpenSavefileDialog();
-
ConvertTocsv
se utilizará para crear un archivo CSV a partir de los datos que hemos creado.dt.ConvertTocsv(filename);
Código fuente del formulario de 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.
LinkedInArtículo relacionado - Csharp CSV
- C# Escribir datos en un archivo CSV
- C# lee un archivo CSV y almacena sus valores en un array
- Leer un archivo CSV en una tabla de datos en C#
- Analizar archivo CSV en C#