使用C#读取Excel CSV文件中的特定列

时间:2018-12-06 08:51:31

标签: c# csv model-view-controller

我有一个如下所示的CSV电子表格

enter image description here

我正在尝试仅从ColumnA中读取数据。阅读有关cvsHelper的信息,但是我不知道如何使用下面的代码来适应它。目前,代码请阅读所有电子表格中的任何建议

C#代码

>>> "{0:+g}".format(2.00001)
'+2.00001'
>>> "{0:+g}".format(-2.00001)
'-2.00001'
>>> "{0:+g}".format(2)
'+2'

4 个答案:

答案 0 :(得分:2)

您自己不用尝试解析CSV文件,而是使用CsvHelper之类的库。请注意,CSV文件中允许Abc,Def,"Ghi,jkl",mno出现,即逗号可以在值内找到,而不仅仅是分隔值。编写解析器是困难的

我已经written about CsvParser before,但是这是为您的文件结构量身定制的示例,我假设图像中给出的列名精确地 。从string csvData = System.IO.File.ReadAllText(filePath);行开始替换了

IEnumerable<LineInMyCsvFile> allRecords = null;

using (var reader = File.OpenText(filePath))
{
    var csvParser = new CsvParser(reader);
    CsvReader r = new CsvReader(csvParser);
    allRecords = r.GetRecords<LineInMyCsvFile>().ToArray();
}

上面的代码读取CSV文件并将每行的内容放入allRecords中,然后您可以遍历它们并对它们执行任何操作:

foreach(var record in allRecords)
{
    // Imagine you only care about the value in ColunmA:
    listmobilenumber.Add(record.ColunmA);
}

这是用于映射CSV文件中的列的结构,以便CsvHelper可以对其进行处理:

// I'm named badly, give me a sensible name that makes sense in context! :-)
struct LineInMyCsvFile
{
    public string ColunmA { get; set; }
    public string ColunmB { get; set; }
    public string ColunmC { get; set; }
    public string ColunmD { get; set; }
}

答案 1 :(得分:1)

在@Rob的帮助下,我只是添加我的最终代码以帮助用户将来遇到相同的问题

--security-opt apparmor=unconfined

CSV类设计

 if (attachmentcsv != null)
 {
  List<string> listmobilenumber = new List<string>();
  string filePath = string.Empty;
  string path = Server.MapPath(@"~/Uploads/");
  filePath = Path.Combine(path, attachmentcsv.FileName);

  IEnumerable<CsvFileModel> allRecords = null;
  StreamReader reader = new StreamReader(filePath);

  using (CsvReader csvReader = new CsvReader(reader))
  {
    csvReader.Configuration.HeaderValidated = null;
    csvReader.Configuration.MissingFieldFound = null;
    allRecords = csvReader.GetRecords<CsvFileModel>().ToArray();
   }
   foreach (var record in allRecords)
   {
     // Passed Mobile number into a list
     listmobilenumber.Add(record.MobileNumber);
   }
 }

答案 2 :(得分:0)

您可以在“添加”中再次分割行:

if (!string.IsNullOrEmpty(row))
{
    listmobilenumber.Add(row.Split(';').First());
}

答案 3 :(得分:-1)

首先找到“ ColumnA”编号

u可以使用类似这样的东西:

if (!string.IsNullOrEmpty(row))
{
   string[] tokens = row.Split(';');
   if(tokens.Length>=number)
      listmobilenumber.Add(tokens[number-1]);
}
相关问题