باستخدام CSVHELPER (Nuget) مع C # MVC لاستيراد ملفات CSV
-
14-11-2019 - |
سؤال
p> http://svhelper.com متوفر عبر Nuget يستخدم لقراءة وكتابة ملفات CSV. يسمح لك
csvhelper بقراءة ملف CSV الخاص بك مباشرة في الفصل المخصص الخاص بك.
كما هو مبين في السابق السؤال giveacodicetagpre.
csvreader سوف الرقم تلقائيا كيف تتناسب مع أسماء الممتلكات بناء على صف رأس (هذا هو شكلي). يستخدم complead. أشجار التعبير بدلا من انعكاس، لذلك هو سريع جدا.
هو أيضا قابل للتوسيع جدا و شكلي.
أنا في الأساس محاولة حل كيفية القراءة في ملف CSV مع رؤوس (أسماء غير معروفة) وقراءة السجلات في كائن مخصص.
لا توجد وثائق حول هذا كل شيء تساءلت إذا كان أي شخص يعرف كيفية استخدام csvreader لوضع القيم من أجل صفيف من السلاسل أو كيف تنصحنا التعامل مع هذا؟
المحلول
This is my first version, I will update as I amend things and make it more complete but this gives me all the data in string arrays.
[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);
}
نصائح أخرى
There is a CsvFieldAttribute
that you can put on your property where you can either put the name of csv field, or the index of the csv field. Name will only work if there is a header row in the csv file.
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; }
}
If all you want to do is read a record into a string array in the order that it's in in the file, you can just use CsvParser
instead of CsvReader
. Calling CsvParser.Read()
returns a string[]
. CsvReader
uses CsvParser
to read the raw data.
I know this is not related to CVSHelpers but you may like to consider the FileHelpers project
It allows you to decorate fields on an object with attributes so that it represents a row in the csv file and then use a FileHelperEngine to read the file in - resulting in an array of objects each one representing a row
see this quick start on reading delimited files