asp.net mvc 3 - how - usando csvhelper(nuGET) con C#MVC para importar archivos CSV
save file csv c# (3)
http://csvhelper.com disponible a través de NuGet se usa para leer y escribir archivos CSV.
CsvHelper le permite leer su archivo CSV directamente en su clase personalizada.
Como se mostró a continuación en una pregunta anterior
var streamReader = // Create a reader to your CSV file.
var csvReader = new CsvReader( streamReader );
List<MyCustomType> myData = csvReader.GetRecords<MyCustomType>();
CsvReader determinará automáticamente cómo hacer coincidir los nombres de propiedad en función de la fila del encabezado (esto es configurable). Utiliza árboles de expresión compilados en lugar de reflexión, por lo que es muy rápido.
También es muy extensible y configurable.
Básicamente estoy intentando averiguar cómo leer en un archivo CSV con encabezados (nombres desconocidos) y leer los registros en un objeto personalizado.
No hay documentación sobre esto en absoluto así que se preguntó si alguien sabía cómo usar CsvReader para ordenar los valores en una serie de cadenas o ¿cómo recomendaría lidiar con esto?
Sé que esto no está relacionado con CVSHelpers, pero es posible que desee considerar el proyecto FileHelpers
Le permite decorar campos en un objeto con atributos para que represente una fila en el archivo csv y luego use un FileHelperEngine para leer el archivo, lo que da como resultado una matriz de objetos, cada uno de los cuales representa una fila
ver este inicio rápido al leer archivos delimitados
Existe un CsvFieldAttribute
que puede colocar en su propiedad donde puede poner el nombre del campo csv o el índice del campo csv. El nombre solo funcionará si hay una fila de encabezado en el archivo csv.
public class MyCustomClass
{
[CsvField( FieldIndex = 1 )]
public string Property1 { get; set; }
[CsvField( FieldIndex = 0 )]
public string Property2 { get; set; }
[CsvField( FieldIndex = 2 )]
public string Property3 { get; set; }
}
Si todo lo que quiere hacer es leer un registro en una matriz de cadenas en el orden en que está en el archivo, puede simplemente usar CsvParser
lugar de CsvReader
. Llamar a CsvParser.Read()
devuelve una string[]
. CsvReader
usa CsvParser
para leer los datos sin CsvParser
.
Esta es mi primera versión, la actualizaré a medida que modifique las cosas y la haga más completa, pero esto me da todos los datos en las matrices de cadenas.
[HttpPost]
public ActionResult UploadFile(HttpPostedFileBase file)
{
ICsvParser csvParser = new CsvParser(new StreamReader(file.InputStream));
CsvReader csvReader = new CsvReader(csvParser);
string[] headers = {};
List<string[]> rows = new List<string[]>();
string[] row;
while (csvReader.Read())
{
// Gets Headers if they exist
if (csvReader.HasHeaderRecord && !headers.Any())
{
headers = csvReader.FieldHeaders;
}
row = new string[headers.Count()];
for (int j = 0; j < headers.Count(); j++)
{
row[j] = csvReader.GetField(j);
}
rows.Add(row);
}
ImportViewModel model = new ImportViewModel(rows);
return View(model);
}