And*_*rew 7 csv import-from-csv asp.net-mvc-3 csvhelper
通过NuGet提供的http://csvhelper.com用于读取和写入CSV文件.
CsvHelper允许您直接将CSV文件读入自定义类.
如上一个问题所示
var streamReader = // Create a reader to your CSV file.
var csvReader = new CsvReader( streamReader );
List<MyCustomType> myData = csvReader.GetRecords<MyCustomType>();
Run Code Online (Sandbox Code Playgroud)
CsvReader将根据标题行自动确定如何匹配属性名称(这是可配置的).它使用编译的表达式树而不是反射,所以它非常快.
它也是非常可扩展和可配置的.
我基本上试图找出如何读取带有标题(未知名称)的CSV文件并将记录读入自定义对象.
根本没有这方面的文档,所以想知道是否有人知道如何使用CsvReader将值按顺序放入字符串数组中,或者你会如何推荐处理这个?
这是我的第一个版本,我将更新,因为我修改了一些内容并使其更完整,但这给了我字符串数组中的所有数据.
[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);
}
Run Code Online (Sandbox Code Playgroud)
还有一个CsvFieldAttribute,你可以把你的财产,你可以把CSV字段的名称,或CSV字段的索引.只有在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; }
}
Run Code Online (Sandbox Code Playgroud)
如果您要做的只是按照文件中的顺序将记录读入字符串数组,则可以使用CsvParser而不是CsvReader.呼叫CsvParser.Read()返回a string[].CsvReader用于CsvParser读取原始数据.