2015-09-07 1 views
8

Я использую класс CsvHelper для записи строк в DataTable в файл csv. Код работает, но я не могу заставить его писать заголовки.Вручную добавить заголовок в CsvHelper.CsvWriter

Как добавить заголовки вручную без создания карты классов?

http://joshclose.github.io/CsvHelper/

DataTable dt = GetDataTableFromDB(); 

System.IO.MemoryStream memoryStream = new System.IO.MemoryStream(); 
System.IO.StreamWriter streamWriter = new System.IO.StreamWriter(memoryStream); 
CsvHelper.CsvWriter writer = new CsvHelper.CsvWriter(streamWriter); 

foreach (DataColumn column in properties.Columns) 
    writer.WriteHeader(column.ColumnName); //<--- How do I write to column 

foreach (DataRow row in dt.Rows) 
{ 
    foreach (object item in row.ItemArray) 
     writer.WriteField(item.ToString()); 

    writer.NextRecord(); 
} 

ответ

15

Это на самом деле в documentation под Writing to a CSV using a DataTable.

Здесь я также приведу пример кода.

using(var dt = new DataTable()) 
{ 
    dt.Load(dataReader); 
    foreach(DataColumn column in dt.Columns) 
    { 
     csv.WriteField(column.ColumnName); 
    } 
    csv.NextRecord(); 

    foreach(DataRow row in dt.Rows) 
    { 
     for(var i = 0; i < dt.Columns.Count; i++) 
     { 
      csv.WriteField(row[i]); 
     } 
     csv.NextRecord(); 
    } 
} 

Заголовки не являются чем-то особенным или отличаются в CSV-файле.

+0

Я бы хотел использовать этот метод, но никогда не использовал '' datareader''. Где я могу узнать, как заполнить новый datatable из существующего datatable? – Zeus

6

Самый простой способ заключается в использовании

writer.WriteHeader<YourClass>(); 

Более полный пример:

using (StreamWriter sw = new StreamWriter(@"C:\output.csv")) 
{ 
    using (CsvWriter writer = new CsvWriter(sw)) 
    { 
    writer.WriteHeader<YourClass>(); 

    writer.WriteRecord(yourRecordVariable); 
    } 
} 

Как была размещена here на группах Google автором Джош Закрыть.

 Смежные вопросы

  • Нет связанных вопросов^_^