Cómo importar (leer) el contenido de un fichero CSV (valores separados por coma) en un componente de tipo ListView en C# (C Sharp) de Visual Studio .NET. Creamos una aplicación C# completa que permite elegir si el CSV contiene la primera fila con los títulos de las columnas, permite elegir el carácter separador de columnas, si los valores de los campos van entre comillas y la codificación de los caracteres.
- Programa C# para leer ficheros CSV y mostrar contenido en ListView.
- Ejecución del programa Importar CSV en C#.
- Descarga del código fuente en C# con Visual Studio .Net de la aplicación Importar CSV.
Programa C# para leer ficheros CSV y mostrar contenido en ListView
Crearemos un nuevo proyecto Visual Studio .Net C# de aplicación de escritorio. En el formulario principal agregaremos los siguientes componentes:
- CheckBox: para marcar si la primera fila del fichero CSV contiene los títulos de las columnas.
- TextBox: para introducir el carácter separador de las columnas (por defecto punto y coma «;»).
- CheckBox: para marcar si los valores de los campos van entre comillas simples o dobles.
- ComboBox: para elegir las comias simples o dobles si van al principio y al final de cada valor de cada columna.
- Codificación: elegiremos la codificación del fichero CSV (UTF, ASCII, etc.).
- Button: el botón que realizará la acción de importación y lectura del fichero CSV.
Tendrá este aspecto:
El código fuente del botón «Importar» seráEl fichero CSV puede contener el título de las columnas en la primera fila o no. Sería conveniente añadir un check () en el formularioEl contenido del fichero CSV será:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
private void btImportarCSV_Click(object sender, EventArgs e) { string separador = txtSeparador.Text; if (separador == "") { MessageBox.Show("Debe indicar el carácter separador de columnas en el " + "CSV. Habitualmente suele ser coma (,) o punto y coma (;).", "Fichero CSV vacío...", MessageBoxButtons.OK, MessageBoxIcon.Information); txtSeparador.Focus(); } else { //Preparamos y mostramos un selector de ficheros CSV, //para que el usuario elija el fichero CSV a abrir OpenFileDialog selCSV = new OpenFileDialog(); selCSV.InitialDirectory = "C:\\"; selCSV.Filter = "CSV (*.csv)|*.csv|Todos los archivos (*.*)|*.*"; selCSV.FilterIndex = 1; selCSV.RestoreDirectory = true; if (selCSV.ShowDialog() == DialogResult.OK) { string ficheroCSV = selCSV.FileName; //Establecemos las propiedades del ListView lsCSV.View = View.Details; lsCSV.GridLines = true; lsCSV.FullRowSelect = true; lsCSV.Items.Clear(); try { //Obtenemos la codificación del fichero (según la elegida en el desplegable) Encoding codificacion = Encoding.UTF8; if (lsCodificacion.Text == "UTF-7") codificacion = Encoding.UTF7; if (lsCodificacion.Text == "UTF-8") codificacion = Encoding.UTF8; if (lsCodificacion.Text == "UTF-32") codificacion = Encoding.UTF32; if (lsCodificacion.Text == "ASCII") codificacion = Encoding.ASCII; //Recorremos todas las filas del fichero CSV y las guardamos en una variable var lineasCSV = File.ReadAllLines(ficheroCSV, codificacion); //Comprobamos que el fichero tenga líneas if (lineasCSV.Count() == 0) MessageBox.Show($"El fichero CSV seleccionado [{ficheroCSV}] no contiene líneas, está vacío.", "Fichero CSV vacío...", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); else { string valorActual = ""; //Si la primera fila contiene los títulos de las columnas del CSV if (opTitulos.Checked) { //Obtenemos la primera línea del CSV que será la que contiene los títulos var lineaTitulos = File.ReadLines(ficheroCSV, codificacion).First(); //Obtenemos las columnas separadas por el separador indicado string[] columnasTitulos = lineaTitulos.Split(Convert.ToChar(separador)); //Añadimos las columnas al ListView for (int i = 0; i < columnasTitulos.Count(); i++) { //Si los valores de los campos van entre comillas, se las quitamos al principio y al final if (opComillas.Checked) valorActual = columnasTitulos[i].Trim(Convert.ToChar(lsComillas.Text)); else valorActual = columnasTitulos[i]; lsCSV.Columns.Add(valorActual); } } //Recorremos todas las líneas del fichero CSV para pasarlas al ListView int numLinea = 0; foreach (string lineaActual in lineasCSV) { numLinea++; //No cogemos la primera línea si contiene los títulos de las columnas if (opTitulos.Checked && numLinea == 1) continue; string[] columnnasLineaCSV = lineaActual.Split(Convert.ToChar(separador)); if (opComillas.Checked) valorActual = columnnasLineaCSV[0].Trim(Convert.ToChar(lsComillas.Text)); else valorActual = columnnasLineaCSV[0]; ListViewItem filasListView = new ListViewItem(valorActual); for (int i = 1; i < columnnasLineaCSV.Count(); i++) { //Añadimos cada fila del CSV como SubItems del ListViewItem //Si los valores de los campos van entre comillas, se las quitamos al principio y al final if (opComillas.Checked) filasListView.SubItems.Add(columnnasLineaCSV[i].Trim(Convert.ToChar(lsComillas.Text))); else filasListView.SubItems.Add(columnnasLineaCSV[i]); } //Agregamos todas las filas al listview final lsCSV.Items.Add(filasListView); //Mostramos algunas estadísticas lNumLineas.Text = $"Nº líneas: {numLinea}, Nº columnas: {columnnasLineaCSV.Count()}"; } } } catch (Exception error) { MessageBox.Show($"Error al leer fichero CSV: {error.Message}", "Error al leer fichero CSV...", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } } |
Ejecución del programa Importar CSV en C#
Un ejemplo de fichero CSV, que contiene la primera fila con los títulos de las columnas. Los campos serpados por punto y coma y los valores entrecomillados:
1 2 3 4 5 6 |
"Número factura";"Cliente";"Importe total";"Observación" "001A";"ProyectoA";"2344,45";"Cobrada" "001B";"Ajpdsoft";"1000,45";"Pendiente de cobro" "002A";"Google";"500,00";"Ver con cliente forma de pago" "003A";"Amazon";"100,50";"Revisar importe de factura" "004A";"Netflix";"1500,25";"Factura devuelta por impago, revisión importe con cliente" |
El programa Importar CSV en ejecución, leyendo el fichero CSV de ejemplo anterior:
Descarga del código fuente en C# con Visual Studio .Net de la aplicación Importar CSV
En el siguiente enlace dejamos la descarga completa y gratuita de la aplicación Importar CSV y su código fuente en C#: