【问题标题】:Write to CSV file using CsvHelper in C#在 C# 中使用 CsvHelper 写入 CSV 文件
【发布时间】:2018-03-22 16:11:54
【问题描述】:

我尝试使用 C# 中的 CsvHelper 写入 CSV 文件。 这是图书馆的链接http://joshclose.github.io/CsvHelper/ 没有任何内容发送到 csv 文件。我尝试了“exportCsv.WriteField("Hello");”,但仍然没有任何反应。

List<string> ColumnOne = new List<string>();
List<string> ColumnTwo = new List<string>();
var csvTextWriter = new 
    StreamWriter(@"C:\Users\Public\Documents\ExportTest.csv");
var exportCsv = new CsvWriter(csvTextWriter);
    //creating a list to store workflows then adding name and description to the myWorkflowsList list
   if (myWorkflows.WorkFlowCollection.Any())
   {
        foreach (var Workflow in myWorkflows.WorkFlowCollection)
        {
                    ColumnOne.Add(Workflow.WorkflowName);
                    ColumnTwo.Add(Workflow.WorkflowDescription);
        }
        exportCsv.WriteField(ColumnOne);
        //exportCsv.WriteField(ColumnTwo);
        exportCsv.NextRecord();
        exportCsv.Flush();
        Console.WriteLine("File is saved: 
                C:\\Users\\Public\\Documents\\ExportTest.csv");
        Console.ReadLine();
    }

【问题讨论】:

  • 我没有看到任何写入任何记录的调用。没有WriteRecordsWriteRecord。只有对 WriteField 的奇怪调用会尝试将整个字符串列表添加到单个单元格中
  • 我希望输出在第 1 列中充满“工作流程名称”,在第 2 列中充满“工作流程描述”。那么您如何建议我使用记录?
  • 您阅读过 CsvHelper 的文档站点吗?它展示了如何编写记录如何编写自定义标题。您的代码没有添加任何记录
  • 我做到了。但在我的情况下添加记录不起作用
  • 它有效。 添加记录但保证不会写入结果。

标签: c# csv csvhelper


【解决方案1】:

您的代码没有添加任何记录。它没有对WriteRecordsWriteRecord 的任何调用。看起来它正在尝试将整个字符串列表写入单个字段。

要将两列写入文件,您可以使用`WriteRecords,例如:

var data = from flow in myWorkflows.WorkFlowCollection
           select new { flow.WorkflowName,flow.WorkflowDescription};
using (var writer = new StreamWriter("test.csv"))
using (var csv = new CsvWriter(writer))
{
    csv.WriteRecords(data);
}

这将写入一个字段名称为 WorkflowNameWorkflowDescription 的文件

您可以通过创建一个仅接受您想要的字段并通过属性设置名称等的小类来更改字段的编写方式:

class Flow
{

    [NameAttribute("Workflow Name")]
    public string WorkflowName { get; set; }
    [NameAttribute("Workflow Description")]
    public string WorkflowDescription { get; set; }

    public Flow(string workflowName, string workflowDescription)
    {
        WorkflowName = workflowName;
        WorkflowDescription = workflowDescription;
    }
}


//...
var data = from flow in myWorkflows.WorkFlowCollection
           select new Flow(flow.WorkflowName,flow.WorkflowDescription);
using (var writer = new StreamWriter("test.csv"))
using (var csv = new CsvWriter(writer))
{
    csv.WriteRecords(data);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    • 1970-01-01
    • 2011-08-19
    相关资源
    最近更新 更多