Чтение определенного столбца в файле Excel CSV с использованием C # - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть таблица CSV, как показано ниже

enter image description here

Я пытаюсь только читать данные из ColumnA.Читайте о cvsHelper, но я не знаю, как адаптировать его с моим кодом ниже.На данный момент код прочитайте всю таблицу любого предложения, пожалуйста,

C # код

 List<string> listmobilenumber = new List<string>();
 string filePath = string.Empty;
  if (attachmentcsv != null)
   {                      
     string path = Server.MapPath("~/Uploads/");
      if (!Directory.Exists(path))
      {
         Directory.CreateDirectory(path);
      }
      filePath = path + Path.GetFileName(attachmentcsv.FileName);
      string extension = Path.GetExtension(attachmentcsv.FileName);
      attachmentcsv.SaveAs(filePath);
      string csvData = System.IO.File.ReadAllText(filePath);
      foreach (string row in csvData.Split('\r','\n'))
      {
         if (!string.IsNullOrEmpty(row))
         {
           listmobilenumber.Add(row);
         }
     }
 }

Ответы [ 4 ]

0 голосов
/ 07 декабря 2018

С помощью @Rob я просто добавляю свой окончательный код, чтобы помочь пользователю с такой же проблемой в будущем

 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);
   }
 }

CSV Class Design

 struct CsvFileModel
    {
        public string MobileNumber { get; set; }
        public string NAME { get; set; }
        public string EMPLOYEENUMBER { get; set; }
        public string JOBTITLEROLE { get; set; }
        public string BAND { get; set; }
    }
0 голосов
/ 06 декабря 2018

сначала найдите номер "ColumnA"

Вы можете использовать что-то вроде этого:

if (!string.IsNullOrEmpty(row))
{
   string[] tokens = row.Split(';');
   if(tokens.Length>=number)
      listmobilenumber.Add(tokens[number-1]);
}
0 голосов
/ 06 декабря 2018

Вместо того, чтобы пытаться анализировать CSV-файлы самостоятельно, используйте библиотеку типа CsvHelper .Помните, что в CSV-файле разрешено присутствие Abc,Def,"Ghi,jkl",mno, т. Е. Запятую можно найти внутри значений, а не только для разделения значений.Написание синтаксических анализаторов hard .

Я писал о CsvParser до , но вот пример с учетом вашей файловой структуры, я предположил, что имена вашихстолбцы точно , как показано на рисунке.Это заменяется со строки 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; }
}
0 голосов
/ 06 декабря 2018

Вы можете снова разделить строку в Add:

if (!string.IsNullOrEmpty(row))
{
    listmobilenumber.Add(row.Split(';').First());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...