【问题标题】:Manually Add Header in CsvHelper.CsvWriter在 CsvHelper.CsvWriter 中手动添加标头
【发布时间】:2015-09-07 17:49:40
【问题描述】:

我正在使用 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();
}

【问题讨论】:

    标签: c# csvhelper


    【解决方案1】:

    更新:

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

    原文:

    这实际上是在Writing to a CSV using a DataTable下的documentation中。

    我也将代码示例放在这里。

    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 文件中没有任何特殊或不同之处。

    【讨论】:

    • 我想使用这种方法,但从未使用过datareader。在哪里可以找到如何从现有数据表中填充新数据表?
    • "标题在 CSV 文件中没有任何特殊或不同之处。"这是真的——但是为什么你有一个名为WriteHeader() 的API?也许它应该有一个接受Enumerable&lt;string&gt; 的重载。
    • 实际上,新文档中省略了使用 DataTable 写入 CSV 的参考文档。库作者在issue #1399中跟踪了一些cmets。
    • DataTable 功能现已内置。 joshclose.github.io/CsvHelper/examples/data-table
    【解决方案2】:

    最简单的方法是使用

    writer.WriteHeader<YourClass>();
    

    更完整的例子:

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

    作者 Josh Close 在 Google 群组上发布了 here

    【讨论】:

    • 我需要在写入标题后添加writer.NextRecord(); 以换行。
    猜你喜欢
    • 2019-05-17
    • 2023-02-13
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多