代码之家  ›  专栏  ›  技术社区  ›  Kathy Judd

在CsvHelper.CsvWriter中手动添加标头

  •  17
  • Kathy Judd  · 技术社区  · 9 年前

    我正在使用 CsvHelper 要在其中写入行的类 DataTable 到csv文件。代码有效,但我无法让它编写标题。

    如何在不创建类映射的情况下手动添加标题?

    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();
    }
    
    2 回复  |  直到 9 年前
        1
  •  25
  •   Josh Close    4 年前

    更新:

    DataTable 功能现已内置。 https://joshclose.github.io/CsvHelper/examples/data-table

    原件:

    这实际上是在 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文件中的标头没有任何特殊或不同之处。

        2
  •  16
  •   jjxtra    2 年前

    最简单的方法是使用

    writer.WriteHeader<YourClass>();
    

    更完整的示例:

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

    发布时 here 作者乔希·克洛斯(Josh Close)在谷歌群组上发表的文章。